Golang のジェネリック メソッド パラメーター
Go では、さまざまな型で動作するジェネリック メソッドを定義でき、柔軟性とコードの再利用性が向上します。 。提供されたコードの問題に対処するために、インターフェイスと埋め込み型の使用を検討します。
インターフェイスの使用
インターフェイスは、型が定義するメソッドのセットを定義します。インターフェースを満たすために実装する必要があります。メソッド パラメーターでインターフェイスを使用すると、メソッドを特定の型から切り離し、インターフェイスを実装する任意の型でメソッドを使用できるようになります。
次のコードを考えてみましょう。
<code class="go">type Mammal interface { GetID() int GetName() string }</code>
ここ, Mammal は、GetID と GetName という 2 つのメソッドを持つインターフェイスを定義します。
埋め込みインターフェイス
埋め込みインターフェイスを使用すると、1 つ以上のインターフェイスのメソッドを継承する型を作成できます。たとえば、Human タイプは Mammal インターフェイスを埋め込むことができます。
<code class="go">type Human struct { MammalImpl HairColor string }</code>
Implementation
次に、MammalImpl と HumanImpl の両方に GetID メソッドと GetName メソッドを実装する必要があります。 。 HumanImpl は MammalImpl を埋め込むため、GetID と GetName の実装を継承します。
<code class="go">type MammalImpl struct { ID int Name string } func (m MammalImpl) GetID() int { return m.ID } func (m MammalImpl) GetName() string { return m.Name } type HumanImpl struct { MammalImpl HairColor string }</code>
Count 関数の変更
ここで、Count 関数を変更して、 Mammal インターフェイスを満たす任意のタイプのスライス:
<code class="go">func Count(ms []Mammal) *[]string { IDs := make([]string, len(ms)) for i, m := range ms { IDs[i] = strconv.Itoa(m.GetID()) // Access ID via the method: GetID() } return &IDs }</code>
哺乳類と人間のスライスの作成
最後に、Mammal を実装するさまざまなタイプのスライスを作成できます。
<code class="go">mammals := []Mammal{ MammalImpl{1, "Carnivorious"}, MammalImpl{2, "Ominivorious"}, } humans := []Mammal{ HumanImpl{MammalImpl: MammalImpl{ID: 1, Name: "Peter"}, HairColor: "Black"}, HumanImpl{MammalImpl: MammalImpl{ID: 2, Name: "Paul"}, HairColor: "Red"}, }</code>
結論
インターフェイスと埋め込み型を使用すると、さまざまなデータ型で動作する汎用メソッドを作成でき、Go プログラムでの柔軟性とコードの再利用性が向上します。 .
以上がGo でインターフェイスと埋め込み型を使用してジェネリック メソッドを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。