点击上方蓝字,关注并星标,和我一起学技术。
今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分。
在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么给结构体定义函数,还有函数接收者的使用。今天我们来学习一下结构体本身的一些使用方法。
初始化
在golang当中结构体初始化的方法有四种。
new关键字
我们可以通过new关键字来创建一个结构体的实例,这种方法和其他语言比较类似,这样会得到一个空结构体指针,当中所有的字段全部填充它类型对应的零值。比如int就对应0,float对应0.0,如果是其他结构体则对应nil。
type Point struct {
x int
y int
}
func main() {
var p *Point = new(Point)
fmt.Print(p)
}
从这段代码当中我们可以看到,new函数返回的是一个结构体指针,而不是结构体的值。一般我们很少用new关键字,而是直接通过结构体加花括号的方式来初始化。
结构体名称
相比于使用new关键字,我们更常用的是通过结构体名称加上花括号的方式来进行初始化。
如果我们不再花括号当中填写参数的话,那么同样会得到一个填充了零值的结构体。结构体当中的所有属性都会被赋予这个类型对应的零值。
type Point struct {
x int
y int
}
func main() {
p := Point{}
fmt.Print(p)
}
如果我们想要初始化一个结构体的指针,我们只需要在结构体名称之前加上取地址符&即可。所以创建一个结构体指针可以这样:
func main() {
p := &Point{}
fmt.Print(p)
}
golang当中取地址符和声明指针的关键字和C语言是一样的,对于熟悉C语言的同学来说,这应该并不困难。
我们在花括号当中填充参数,这些参数会按照顺序填充到结构体的属性当中。为了防止混淆,我们也可以在值之前加上它对应的属性名称。
func main() {
p := &Point{0, 0}
k := &Point{x: 0, y: 10}
fmt.Print(p)
}