ホームページ  >  記事  >  バックエンド開発  >  共通フィールドを使用して Go 構造体の共有メソッドを実装するにはどうすればよいですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-21 07:47:09656ブラウズ

How to Implement Shared Methods for Go Structs with Common Fields?

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

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