Go で共通フィールドを持つ構造体の共有メソッドを実装する方法
共通フィールドを共有する複数の構造体を扱う場合、これらの構造体に共通のメソッドを実装する必要が生じることがよくあります。継承やミックスインは実行可能なアプローチのように見えるかもしれませんが、Go では制限に直面しています。
1 つのアプローチは、以下に示すように、目的のメソッドを指定するインターフェイスを定義することです。
type Savable interface { Save() } // Satisfy Savable for ModelA func (m ModelA) Save() { // Implement Save() for ModelA } var i Savable i = SomeMethodThatReturnsMyModel() i.Save() // Call Save() on the implementing type SomeOtherMethodThatAcceptsASavableAndCallsSave(i)
あるいは、埋め込みを使用してコードを再利用できます。ただし、埋め込み型でも定義されていない限り、o.Insert(this) を呼び出すときに埋め込みフィールドは挿入されないため、これには慎重な考慮が必要です。
type ModelC struct { Guid string `orm:"pk"` } func (m ModelC) Save() { // Implement Save() for ModelC } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
埋め込みはそうではないことを覚えておくことが重要です。継承ベースのメソッドのオーバーライドをサポートします。埋め込み構造体で Save() を再定義し、再定義内で基本クラスのメソッドを呼び出すことは、Go では良い習慣とは見なされません。
2 つのアプローチのどちらかを検討する場合、特定の要件とトレードオフを評価することが重要です。関与した。インターフェイスのアプローチにより柔軟性が高まり、埋め込みはパフォーマンス上の利点をもたらしますが、埋め込みフィールドの動作を慎重に考慮する必要があります。
以上が共通フィールドを使用して Go 構造体の共有メソッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。