作用:为了将函数与结构体绑定,类似于OOP中的对象与方法。
格式
func (接收器变量 接收器类型) 方法名(参数列表) (返回参数){ //函数体 }
- 接收器类型
- 指针接收器:指针类型的接收器由一个结构体的指针组成,更接近于面向对象中的this,由于指针的特性,调用方法时,修改接收器指针的任意成员变量,在方法结束后,修改都是有效的。
- 非指针接收器:Go语言会在代码运行时将接收器的值复制一份。在非指针接收器的方法中可以获取接收器的成员值,但修改后无效。
- 如何选择
- 在计算机中,小对象由于值复制时的速度比较快,所以适合使用非指针接收器。大对象因为复制性能低,适合使用指针接收器,在接收器和参数间传递时不进行复制,只传递指针。
- 有修改成员变量的需求,用指针类型的接收器。
- 测试
type Cat struct { Name string Age int } func (c Cat) changeName1() { c.Name = "酷黑猫" fmt.Println("changeName1 中修改后:", c) } func (c *Cat) changeName2() { c.Name = "大花猫" fmt.Println("changeName2 中修改后:", c) } func main() { var fan = Cat{Name: "小番茄", Age: 20} fmt.Println("changeName1 之前:", fan) fan.changeName1() fmt.Println("changeName1 之后:", fan) fmt.Println(".....................") fmt.Println("changeName2 之前:", fan) fan.changeName2() fmt.Println("changeName2 之后:", fan) }复制代码
有疑问加站长微信联系(非本文作者)