概述
Pointer指针
Go支持指针,可以在程序中传递值或值的引用。
下面的示例通过两个函数来展示指针的使用方式:zeroval和zeroptr。函数zeroval有一个int参数,因此参数将按值传递给它。zeroval将从调用函数中得到一个传递进来的值的副本ival。函数zeroptr则有一个*int参数,这意味着它接受一个int指针。
函数体中解指针语法*ipt从其内存地址中得到该地址的当前值。为解指针赋值将更改该地址的值。取指针语法&i获得变量i的内存地址,也叫i的指针。指针也可以打印。zeroval不会更改main函数中i的值,但zeroptr会,这是因为它引用了该变量的内存地址,通过变量的地址改变了变量的内容。
结果:
$ go run pointers.go
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x42131100
Struct结构体
Go的结构是字段的类型集。它们用于将数据分组形成记录。
下面例子中,person结构类型具有名字和年龄字段。函数NewPerson则使用给定的名字构造person结构的实例,并把该实例的指针安全地返回给局部变量,局部变量将在声明它的函数的作用域内生存。可以在初始化结构时指定字段名,省略的字段将为零值。取指符&生成指向该结构的指针。习惯上,封装一个构造函数用于创建结构实例。通过点符号.访问结构的字段,点符号可以与结构指针一起使用-指针将自动解引用。
结果:
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
Method方法
Go支持在结构类型上定义方法。在定义方法时,函数名前声明此方法的接收器,此函数即成为该接收器所属类型的方法,如下所示,area方法的接收器为*rect。可以为值接收器或指针接收器定义方法,使用哪种接收器由是否需要在方法中更改接收器内部状态来决定。
下面的例子中使用两种类型的接收器为结构rect定义方法。调用方法时,Go会自动处理值和指针之间的转换。指针接收器的好处是避免对结构所有域的值进行复制,或允许该方法在对结构的域的值进行修改。
结果:
$ go run methods.go
area: 50
perim: 30
area: 50
perim: 30
Interface接口
接口是方法签名的命名集合。下面的例子显示了一个用于几何图形的基本接口。矩形和圆形类型要实现此接口。实现一个Go接口,只需要在该类型上完成接口中的所有方法即可。如下所示,矩形和圆形都实现了该接口。
如果一个类型实现某个接口,那么可以把这个类型的变量赋给接口的变量,通过接口变量来操作类型变量,这样可以实现通用函数。如下所示measure是一个通用函数,它可以处理任何几何体。circle和rect结构都实现了geometry接口,所有都可以把它们的实例作为参数传递给measure函数。
结果:
$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793
Error错误
在Go中,习惯上通过一个显式的、单独的返回值来传递错误消息。这与Java和Ruby中的异常以及C中结果/错误值形成了对比。
Go的方式使我们可以很容易地看到哪些函数返回错误,并使用与处理其他非错误任务相同的语言结构来处理它们。习惯上,错误值放在返回值中的最后一个,类型为error,是这Go的一个内置接口。
errors.New用给定的错误消息构造一个基本的错误值。在错误值的位置使用nil值表示没有错误发生。通过在自定义类型上实现Error方法后,也可以将其用作错误值。下面的例子中使用了自定义类型显式地表示传递进错误的参数,初始化错误值并作为返回值的最后一个值返回。请注意,在if行上做错误检测是Go代码中常见的用法,错误值为nil没有错误发生,否则有错误。如果要在代码中访问自定义错误中的数据,则需要通过类型断言的方式获得该错误类型的实例。
结果:
$ go run errors.go
f1 worked: 10
f1 failed: can't work with 42
f2 worked: 10
f2 failed: 42 - can't work with it
42
can't work with it
最后
以上就是粗犷羊为你收集整理的go 类型断言_Go语言学习基础-指针、结构体、方法、接口、错误Pointer指针Struct结构体Method方法Interface接口Error错误的全部内容,希望文章能够帮你解决go 类型断言_Go语言学习基础-指针、结构体、方法、接口、错误Pointer指针Struct结构体Method方法Interface接口Error错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复