以下のコードを参照してください。私は、非ポインタ受信機がポインタ値と非ポインタ値を受け入れることができるが、ポインタ受信機はポインタ値だけを受け入れることができるということを知っている。それは言われている、私は最後の呼び出しがどのように動作し、2番目の最後の呼び出しが理解していない。 (Run Here)非ポインタ値の呼び出しポインタ受信メソッド
問題点は、非ポインタメソッドからPointer Receiverメソッドを呼び出すことができることです。それは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()
}
[Golangメソッドとポインタ受信機]の可能な複製(https://stackoverflow.com/questions/33936081/golang-method-with-pointer-receiver) – Marc
https:// blog .golang.org/reflection of laws – Kaedys