まず、私はGoが新しくなりました。したがって、用語の間違いや間違いを許してください。私は、用語のコマンドの私の欠如は、部分的には、次の質問への答えを見て何時間もの後に見つからないために責任があると思う。組み込み関数内の関数へのアクセス
要するに、私は次のコードの出力はになりたい出力がある代わりに
I am the Adult
I am the Child
I am the Adult
I am the Adult
コード:本質的には
package main
import "fmt"
type Human struct {
age uint
name string
}
func (h Human) sayName() error {
fmt.Println("I am the Adult")
return nil
}
func (h Human) Introduce() error {
h.sayName()
return nil
}
type Child struct {
Human
}
func (c Child) sayName() error {
fmt.Println("I am the Child")
return nil
}
func main() {
h := Human{}
h.Introduce()
c := Child{Human{}}
c.Introduce()
}
ので、 Introduce()は埋め込み型のHumanでのみ実装されていますが、sayName()を呼び出します。これは埋め込み型の両方に実装されていますタイプと埋め込みタイプです。
組み込みのHuman構造体が埋め込まれていることを「認識」していないため、Child.sayNameを呼び出すことができず、独自のsayName()関数だけを呼び出すことができるため、現在の出力はそのままです。
Human.sayName()を代替のsayName()関数で "置き換える"ことができるHuman構造体(または構造体を埋め込む構造体)をインスタンス化する方法はありますか?
私はあなたが何を意味するかを見ていると思います。任意の特定の構造体によって受け取られる関数であるIntroduce()の代わりに、定義された受信者を持たない関数に変更されますが、Talkerが実装する構造体として定義されている "Talker" sayName()? – davidr
@ user306537はい。悲しいことに、インタフェース受信機能を持つメソッドを定義することはできません(これは、インタフェースを役割として機能させることになります)。 – hobbs