ホームページ > バックエンド開発 > Golang > Go の埋め込みメソッドは親フィールドにアクセスできますか?

Go の埋め込みメソッドは親フィールドにアクセスできますか?

Mary-Kate Olsen
リリース: 2024-12-06 06:06:14
オリジナル
747 人が閲覧しました

Can Embedded Methods in Go Access Parent Fields?

Go の埋め込みメソッドから親フィールドにアクセスする: 実現可能ですか?

Go では、埋め込みメソッドを使用して他の型に型を埋め込むことができ、コードを再利用し、よりシンプルなインターフェイスを提供します。しかし、一般的な疑問が生じます: 埋め込みメソッドは親型のフィールドにアクセスできますか?

Background:

Go の埋め込みメカニズムは合成を利用して、型の機能を拡張します。継承。型が埋め込まれると、そのフィールドとメソッドは埋め込み型の一部になります。

目標:

この質問の目的は、アクティブ レコード スタイルの ORM の作成に関連しています。 Go では、データ ストアを抽象化するためにユーザー構造体にメソッドが埋め込まれています。操作。

例:

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    // How to access "Name" field from this embedded method?
}
ログイン後にコピー

質問:

トップレベルのフィールドを作成する方法はありますか (親フィールド) s.Name や call などの埋め込みメソッドからアクセス可能s.Method()?

答え:

Go は、埋め込みメソッドからの親フィールドへのアクセスをネイティブにサポートしていません。埋め込みメソッドのレシーバーは、この場合は埋め込み型 *Bar に厳密にバインドされます。したがって、親フィールドに直接アクセスすることはできません。

代替アプローチ:

  • インターフェースベースの解決策: インターフェースを追加する{}フィールドを埋め込み型に変換します。このインターフェイスを実装するには、含まれる型が必要です。このアプローチでは、親型へのアクセスが提供されますが、さらに複雑になる可能性があります。
  • 変更された API 構造: API を user.Save() ではなく db.Save(user) として構造化することを検討してください。このアプローチは、Go の関数呼び出しの慣用的な使用法と一致しており、複数のデータベースを適切に処理します。

以上がGo の埋め込みメソッドは親フィールドにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート