对Go的接口赋值的理解

开始。

//"Go语言编程"的"3.5.3 接口赋值"相关内容
package main

//Go的函数不存在重载,所以不可以有重名函数,否则会报错[method redeclared]
//Go可以根据"类型"的函数,自动生成"类型指针"的函数.但是无法根据"类型指针"的函数生成"类型"的函数.
import (
	"fmt"
)

type Integer int

func (a Integer) Less(b Integer) bool {
	return a < b
}

/* Go可以根据"类型"的函数,自动生成"类型指针"的函数.比如根据Less函数自动生成了
func (a *Integer) Less(b Integer) bool {
	return (*a).Less(b)    //注意:这里是【(*a).Less(b)】而不是【*a < b】
}
其实就是"类型指针"的函数调用了"类型"的函数.下面的函数LessAuto就是自动生成的Less的具象形式.
*/

func (a *Integer) LessAuto(b Integer) bool {
	return (*a).Less(b)
}

func (a *Integer) Add(b Integer) {
	*a += b
}

/* Go无法根据"类型指针"的函数,生成"类型"的函数.比如Add函数就无法自动生成
func (a Integer) Add(b Integer) {
	(&a).Add(b)
}
因为该函数仅仅改变了入参a的值,并没有改变这个类型的对象实例的值.
你可以调用一下AddAutoFail函数,会发现,它的行为和Add函数的行为不一致.
*/

func (a Integer) AddAutoFail(b Integer) {
	(&a).Add(b)
}

func main() {
	var a Integer = 7
	fmt.Println("print1", a)
	a.AddAutoFail(1)
	fmt.Println("print2", "AddAutoFail", a)
	a.Add(1)
	fmt.Println("print2", "Add", a)
}

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值