共有フィールドを持つ異なる構造体に Save メソッドを追加する方法
次のコンテキストを考慮してください:
type ModelA struct { Guid string `orm:"pk"` FiledA string } type ModelB struct { Guid string `orm:"pk"` FiledB string }
両方の構造体 (ModelA と ModelB) に Save() メソッドを導入する必要が生じました。共通の基本構造体を作成して ModelA と ModelB に埋め込むことは可能ですが、このアプローチは ORM の制限により実行できません。
代替アプローチ: インターフェイスの実装
以下に示すように、Savable などのデータ保存用の共通インターフェイスを指定します:
type Savable interface { Save() }
各構造体に Save() メソッドを実装し、それらが Savable インターフェイスを満たすことを確認します:
func (a ModelA) Save() { // Save logic for ModelA } func (b ModelB) Save() { // Save logic for ModelB }
この構造を配置すると、Savable インターフェイスを介していずれかの構造体のインスタンスを操作できます。
var i Savable i = SomeMethodThatRetunsMyModel() i.Save() SomeOthermMethodThatAcceptsASavableAndCallesSave(i)
埋め込みを使用した実装
あるいは、次のこともできます。また、共通フィールド (Guid) を持つベース ModelC を定義することで埋め込みアプローチを選択することもできます:
type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string } type ModelC struct { Guid string `orm:"pk"` } func (c ModelC) Save() error { // Save logic for ModelC return nil }
ただし、このメソッドは ModelC で定義されたフィールドのみを保存することに注意してください。
考慮事項
両方のアプローチの制限に注意することが重要です:
最終的に、最適なソリューションはアプリケーションの特定の要件によって異なります。
以上が共有フィールドを持つ異なる Go 構造体に Save メソッドを効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。