Go中的方法与接收器

mb6008e936aad4e · · 2530 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  • 作用:为了将函数与结构体绑定,类似于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)
}复制代码

有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb6008e936aad4e

查看原文:Go中的方法与接收器

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2530 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传