receiver为指针的方法,则没有实现对应的receiver为值的方法,值可以调用只是语法糖(取指针后调用)
编译器对接口则没有语法糖提供
method-value绑定的receiver在绑定时就确定了,乃是一个拷贝,而非外部变量
method-expression则与普通的函数无异(注意receiver类型的不同)
package main
type INT int
func (i INT) A() {
print(int(i)," ")
}
func (i *INT) B() {
print(int(*i)," ")
}
func (i INT) C() {
i+=1
}
func (i *INT) D() {
*i+=1
}
func main() {
var i INT
j:=&i
a:=i.A
b:=i.B
c:=INT.A
d:=(*INT).B
i.B()
i.C()
i.B()
i.D()
i.B()
print("\n-------\n")
j.B()
j.C()
j.B()
j.D()
j.B()
print("\n-------\n")
a()
b()
c(i)
d(&i)
print("\n-------\n")
i=INT(2)
a()
b()
c(i)
d(&i)
}
// 0 0 0 0
// -------
// 0 1 1 1