ホームページ >バックエンド開発 >Golang >フィールドを共有する Go 構造体に共通の `Save()` メソッドを実装するにはどうすればよいですか?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-24 07:03:11325ブラウズ

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>
<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。