【发布时间】:2017-12-15 02:06:56
【问题描述】:
请看下面的代码。我知道这是一个事实,非指针接收器可以接受指针和非指针值,但指针接收器只能接受指针值。话虽如此,我不明白最后一个电话是如何工作的,而倒数第二个电话不是。 (Run Here)
问题是我能够从非指针方法调用指针接收器方法。这在other similar question 中没有解释。该答案仅解释了指针调用指针接收器方法。
package main
import (
"fmt"
)
type person struct {
name string
}
type human interface {
speak() string
}
func (p *person) speak() string {
return "Speak() called by " + p.name
}
func saySomething(h human) {
fmt.Println("area", h.speak())
}
func main() {
p := person{"harsh"}
//works
saySomething(&p)
//doesn't work
//saySomething(p)
//works
p.speak()
}
【问题讨论】: