フィールドを共有する Go 構造体に共通の `Save()` メソッドを実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-24 07:03:11
オリジナル
299 人が閲覧しました

How to Implement a Common `Save()` Method for Go Structs Sharing a Field?

Go で共有フィールドを持つ構造体の共通メソッドを実装する方法

共通フィールドを共有する構造体を操作する場合、それらすべてに適用できるメソッドを追加することが望ましいです。この質問では、Beego/ORM のコンテキストでこのシナリオを検討します。ModelA と ModelB の 2 つの構造体に Save() メソッドが必要です。

提案されたソリューション

  • インターフェイス定義: Save() メソッドを宣言する Savable というインターフェイスを定義します。 ModelA と ModelB の両方にこのインターフェイスを実装して、Save() 機能を利用できるようにします。 🎜>
  • func (ModelA) Save() {


}

Save()
ログイン後にコピー
func (b ModelB) Save() {

}

// Implementation for ModelA
ログイン後にコピー

Embedding:

という基本構造体を作成します。共有 GUID フィールドを含む ModelC。この構造体を ModelA と ModelB に埋め込みます。 ModelC で Save() メソッドを定義して、ModelA と ModelB の両方で使用できるようにします。
// Implementation for ModelB
ログイン後にコピー


</p>type ModelC struct {<ul>
<li><strong>}</strong></li>func (c ModelC) Save() エラー{</ul>
<p><br>}</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Guid string `orm:"pk"`
ログイン後にコピー
型 ModelA 構造体 {

}

// Implementation for ModelC
ログイン後にコピー
型 ModelB 構造体{

}

ModelC
FiledA string
ログイン後にコピー

埋め込みに関する注意

ModelC
FiledB string
ログイン後にコピー
埋め込みには特定の制限があることに注意してください。埋め込み Save() メソッドは ModelA と ModelB で使用できますが、これらの構造体に固有の追加フィールドは Save() 操作に自動的に含まれません。


結論

最も適切なソリューションは、システムの特定の要件によって異なります。 Save() の実装が ModelA と ModelB の間で大幅に異なる場合、インターフェイスのアプローチにより柔軟性が高まります。ただし、共通の実装を共有している場合は、冗長コードの必要性がなくなるため、埋め込みの方が効率的になる可能性があります。

以上がフィールドを共有する Go 構造体に共通の `Save()` メソッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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