type MyInt int
func (i *MyInt)incr{ //以指针为接收者的方法
(*i)++
}
func main() {
var i MyInt
i.incr() // i=1,被Go解释为 (&i).incr()
p := &i
p.incr() // i=2
}
以指针为接收者的方法被调用时,接收者既能为值又能为指针
对于语句 i.incr()
,即便 i 是个值而非指针,带指针接收者的方法也能被直接调用。 也就是说,由于 incr
方法有一个指针接收者,为方便起见,Go 会将语句 i.incr()
解释为 (&i).incr()
。
type MyInt int
func (i MyInt) incr{
i++
}
func main() {
var i MyInt
i.incr() // i=0
p := &i
p.incr() // i=0,被Go解释为 (*i).incr()
}
而以值为接收者的方法被调用时,接收者既能为值又能为指针。这种情况下,方法调用 p.incr()
会被解释为 (*p).incr()
。