对Go的接口赋值的理解

来源:互联网 发布:淘宝如何开通微淘 编辑:程序博客网 时间:2024/05/19 20:46

开始。

//"Go语言编程"的"3.5.3 接口赋值"相关内容package main//Go的函数不存在重载,所以不可以有重名函数,否则会报错[method redeclared]//Go可以根据"类型"的函数,自动生成"类型指针"的函数.但是无法根据"类型指针"的函数生成"类型"的函数.import ("fmt")type Integer intfunc (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 = 7fmt.Println("print1", a)a.AddAutoFail(1)fmt.Println("print2", "AddAutoFail", a)a.Add(1)fmt.Println("print2", "Add", a)}

结束。