アプリケーションでは、2 つのモデル ModelA に Save() メソッドを実装する必要があります。そしてモデルB。違いはありますが、Guid という共通の分野を共有しています。通常、共通フィールドを保持するために基本構造体が作成され、個々のモデルに埋め込まれます。ただし、このアプローチは beego/orm のような ORM にとって障害となります。
インターフェイスを使用した Save() メソッドの実装
1 つの効果的な解決策は、インターフェイスを定義することです。保存可能で、ModelA と ModelB の両方に実装します。これにより、使用されている特定のモデルに関係なく、インターフェイス タイプを使用して Save() メソッドを呼び出すことができます。以下に例を示します。
type Savable interface { Save() } func (a ModelA) Save() { // Save implementation for ModelA } func (b ModelB) Save() { // Save implementation for ModelB } // Example usage var i Savable i = SomeMethodThatRetunsMyModel() i.Save()
共通構造体の埋め込み
埋め込み型が優先される場合は、別のアプローチを採用できます。 Guid フィールドを保持する共通の構造体 ModelC を作成します。次に、ModelC を ModelA と ModelB に埋め込みます。 ModelC 内で Save() メソッドを定義すると、両方のモデルに共通の機能が提供されます。
type ModelC struct { Guid string `orm:"pk"` } func (c ModelC) Save() error { // Common Save implementation return nil } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
この埋め込みアプローチには、ORM の挿入ステートメントに定義されていないフィールドが含まれないことに注意することが重要です。モデルC。したがって、非共通フィールドを明示的に操作する必要がある場合は、ModelC メソッドへの直接参照が必要になる場合があります。
以上がフィールドを共有するさまざまな Go 構造体に共通のメソッドを効率的に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。