Go では、さまざまな型のデータを操作する関数が必要であることが一般的です。たとえば、特定のタイプのスライス内の要素の数を数える関数を考えてみましょう。最初に設計された特定の型だけでなく、あらゆる型のデータを処理できるようにこの関数を設計するにはどうすればよいでしょうか?
1 つのアプローチは、インターフェイスを使用することです。インターフェイスは、本質的に、型が必要とするメソッドのセットを定義するコントラクトです。インターフェイスに準拠するように実装します。インターフェイスをメソッド パラメーターとして使用すると、必要なインターフェイスを実装する任意の型で動作する汎用関数を作成できます。
次の例を考えてみましょう。ここでは、要素の数をカウントする汎用 Count 関数を作成することを目的としています。スライス内:
<code class="go">func Count[T any](s []T) int { return len(s) }</code>
このようなジェネリックスを使用すると、任意の型のスライスを Count に渡すことができ、入力型に基づいて要素を動的にカウントできるようになります。
さらに、次のことができます。インターフェイスを利用して、特定のタスク用の汎用メソッドを実装します。たとえば、GetID メソッドを使用して Identifiable インターフェイスを定義し、スライス要素の実際の型に関係なく、ID 値に基づいてスライス内の要素を検索する汎用 FindByID 関数を作成できます。
<code class="go">type Identifiable interface { GetID() int } func FindByID[T Identifiable](s []T, id int) *T { for i, v := range s { if v.GetID() == id { return &s[i] } } return nil }</code>
インターフェイスとジェネリックを組み込むことで、柔軟性が高く、さまざまな種類のデータを効果的に操作できる関数を作成する力が得られます。
以上がGolang でさまざまなデータ型に対応する汎用関数を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。