开始。
//"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)
}
结束。