背景:
広範な調査とテストの後、著者は次のように考えています。 Go の埋め込みメソッドは「親」フィールドにアクセスできないということです。この質問では、既知の例外や代替アプローチがあるかどうかを調べます。
目標:
目的は、CRUD 操作が行われる Go 用のアクティブ レコード スタイルの ORM を作成することです。ユーザー構造体に埋め込まれます。これにより、バックエンド データ ストアの可読性と抽象化が向上します。
例:
提供された Go コード スニペットは、"埋め込み「Bar」構造体の「Test」メソッドからの「Foo」構造体。ただし、コンパイル エラーが発生します。
質問:
Go には、埋め込みメソッドが外側の構造体のフィールドにアクセスできるようにするメカニズムはありますか?
答え:
Go は、内部の親フィールドへの直接アクセスをサポートしていません。埋め込みメソッド。 「Test」メソッドのレシーバーのタイプは「Bar」ポインタであり、このポインタが埋め込まれているかスタンドアロンであるかをメソッドが判断する方法はありません。
考えられる解決策:
回避策の 1 つは、interface{} メンバーを「Bar」構造体に追加し、含まれる型をこのメンバーに割り当てることを要求することです。{}ただし、これは洗練された解決策ではなく、さらに複雑になります。
代替アプローチ:
メソッドを埋め込む代わりに、著者は、次のような別の API 構造を使用することを提案しています。 「user.Save()」ではなく「db.Save(user)」。このアプローチにより、複数のデータベースへの拡張が容易になり、グローバル状態への依存が軽減されます。
以上が埋め込み Go メソッドは、囲んでいる構造体フィールドにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。