go语言结构体学习

160 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

匿名结构体

在实际开发中,还有一类情况,就是某个结构体的作用域很小,甚至只存在于某个函数内部,或是无需创建太多的该结构体变量等等。对于上述情况,Go语言允许我们使用匿名结构体简化编码,即使用匿名结构体。

wishingTree := struct {
   height   float64
   width    float64
   treeType string
}{
   height:   22.5 * 100,
   width:    50,
   treeType: "banyan"}
fmt.Println(wishingTree)

扩展阅读:关于匿名结构体的更多使用场景,包括序列化和反序列化JSON格式,一文读懂Go匿名结构体使用场景 - 掘金 (juejin.cn)

接收器

func (接收器变量 接收器类型) 方法名(参数列表) (返回参数) {     
    函数体 
}

在Go语言中,方法和函数的定义格式非常像,由于方法和对象存在紧密的关系,因此在定义的格式上需要接收器

其中,接收器变量和接收器类型共同构成了接收器;参数列表是可选的;返回参数也是可选的;方法名无需多做解释。

为对象定义方法时,需要注意接收器的类型。使用指针与否,将决定了是否对原始变量产生影响。本例使用了*Dog,即指针类型,在方法中对该类型变量(d变量)的任何影响都将影响原始变量(fatShibaInu);反之,若使用Dog类型,则不会影响。

其原因是当不使用指针类型变量时,方法中的接收器变量实际上是对原始数据的“拷贝”,所做出的改变也仅仅会作用于这份“拷贝”的数据上,并不会影响到原始数据。

Go语言使用匿名结构体解析JSON数据 (biancheng.net)