Golang方法的本质及receive类型

  Go语言虽然不支持面向对象语法元素,但Go语言也有方法。和函数相比,Go语言中的方法在声明形式上仅仅多了一个参数,即称之为Go receiver参数。receiver参数是方法与类型之间的纽带
  Go方法的一般声明形式如下:

func (receiver T/T*) MethodName(参数列表) (返回值列表) {
	// 函数体
}

上面方法声明中的T/T*称为receiver的基类型。通过receiver,上述方法被绑定到类型T/T上。可以通过类型T/T的实力调用该方法。

  Go方法有如下特征:

  • 方法名的首字母是否大写决定该方法是不是导出方法
  • 方法定义要与类型定义放在一个保内。因此不能为原生类型添加方法,只能为自定义类型定义方法;同样不能横跨Go包为其他保内自定义类型定义方法
  • 每个方法只能有一个receiver参数,不支持多receiver参数列表或变长receiver参数。
  • receiver参数的基类型本身不能是指针类型或接口类型
一、方法的本质

  Go方法定义:

type T struct {
	a int
}

func (t T) Get() int {
	return t.a
}

func (t *T) Set(a int) int {
	t.a = a
	return t.a
}

  C++的对象在调用方法时,编译器会自动传入指针对象自身的this指针作为方法的第一个参数。而对于Go,receiver其实也是同样的原理,将receiver作为第一个参数传入方法的参数列表。所以上述定义方法可以等价转换为下面普通方法:

func Get(t T) int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值