Go中的方法与接收器


本文摘自网络,作者,侵删。

  • 作用:为了将函数与结构体绑定,类似于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 反射解析结构体标签tag

Golang调试工具有哪些?

Golang 可以开发 web 吗?

Golang的zap日志库的简单封装

Golang slice 的一些事

deepin下配置protobuf(含Go语言protoc-gen-Go插件安装)

Golang map判断key是否存在

Go语言————3、编辑器、集成开发环境与其它工具

Go get下载包失败问题

Go语言向函数传递数组

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...