Go では、さまざまな型のデータを操作する関数が必要になることが一般的です。たとえば、特定のタイプのスライス内の要素の数を数える関数を考えてみましょう。最初に設計された特定の型だけでなく、任意の型のデータを処理できるようにこの関数を設計するにはどうすればよいでしょうか?
1 つのアプローチは、インターフェイスを使用することです。インターフェイスは、本質的に、型が必要とするメソッドのセットを定義するコントラクトです。インターフェイスに準拠するように実装します。インターフェイスをメソッド パラメーターとして使用すると、必要なインターフェイスを実装する任意の型で動作する汎用関数を作成できます。
次の例を考えてみましょう。ここでは、要素の数をカウントする汎用 Count 関数を作成することを目的としています。スライス内:
func Count[T any](s []T) int {
return len(s)
}
このようなジェネリックスを使用すると、任意の型のスライスを Count に渡すことができ、入力型に基づいて要素を動的にカウントできるようになります。
さらに、インターフェイスを利用してジェネリック メソッドを実装できます。特定のタスク用。たとえば、GetID メソッドを使用して Identifiable インターフェイスを定義し、スライス要素の実際のタイプに関係なく、ID 値に基づいてスライス内の要素を検索する汎用 FindByID 関数を作成できます。
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
}
インターフェイスとジェネリックスを組み込むことで、柔軟性が高く、さまざまな種類のデータを効果的に操作できる関数を作成できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3