埋め込みメソッドから親フィールドへのアクセス
背景
埋め込みメソッドを使用して簡略化する場合オブジェクト指向プログラミングでは、これらのメソッドはオブジェクト指向プログラミングのフィールドにアクセスできるかという疑問が生じます。親オブジェクト?
目標
目標は、Save() や Delete() などのメソッドがアタッチされる Active Record パターンを模倣する Go 用の ORM を作成することです。保存または削除されるオブジェクトに。このアプローチにより、コードの可読性が簡素化され、基盤となるデータ ストアからコードが切り離されます。
例
以下のコードは、Foo 内の埋め込みメソッド (Test()) を示しています。 type:
package main import ( "fmt" "reflect" ) func main() { test := Foo{Bar: &Bar{}, Name: "name"} test.Test() } type Foo struct { *Bar Name string } func (s *Foo) Method() { fmt.Println("Foo.Method()") } type Bar struct { } func (s *Bar) Test() { t := reflect.TypeOf(s) v := reflect.ValueOf(s) fmt.Printf("model: %+v %+v %+v\n", s, t, v) fmt.Println(s.Name) s.Method() }
質問
埋め込みメソッド (Test()) は親 (Foo) オブジェクトの Name フィールドにアクセスできますか?
答え
いいえ、Go に直接の方法はありません。埋め込みメソッドを使用して親オブジェクトのフィールドにアクセスします。 Test() メソッドのレシーバーの型は *Bar ですが、ターゲット オブジェクトの型は Foo です。
代替アプローチ
親フィールドへのアクセスが必須の場合は、可能です。解決策には次のものが含まれます:
以上がGo の埋め込みメソッドは親オブジェクトのフィールドにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。