ホームページ >バックエンド開発 >Golang >Go でインターフェイスと埋め込み型を使用してジェネリック メソッドを作成するにはどうすればよいですか?

Go でインターフェイスと埋め込み型を使用してジェネリック メソッドを作成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 01:20:02443ブラウズ

How can I use interfaces and embedded types to create generic methods in Go?

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

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