Go での任意の型とジェネリック リストの実装
Go プログラミングでは、データ構造の実装に関してジェネリックの欠如が課題となる可能性があります。 。 2 つの一般的な問題に対処しましょう:
1.ジェネリック リストの実装
Go はジェネリックを直接サポートしませんが、任意の値を表すインターフェイス タイプを提供します。{}このインターフェースを使用すると、任意の型の値を保持できる「汎用」データ構造を作成できます。
ただし、interface{} の使用には欠点があり、値にアクセスするときに値を手動で入力アサートする必要があります。たとえば、次のコードはインターフェースのリストを定義します。{}:
type AnyList []interface{}
リストに整数を追加するには:
list := AnyList{1}
整数を取得するには、assert it と入力する必要があります。元の型に戻す:
value := list[0].(int)
2.特定の型のフィールドを持つコンテナの作成
Go には、Haskell の List a や Scala の val List[Animal { type SimplyFood = Grass} ] のような代数データ型に直接相当するものはありません。ただし、インターフェイスと埋め込みを組み合わせて使用すると、同様の結果を達成できます。
たとえば、動物のインターフェイスを定義できます。
type Animal interface { GetSuitableFood() string }
その後、動物の構造体を定義できます。文字列型の「SuitableFood」フィールドを持つもの:
type GrassEatingAnimal struct { Animal SuitableFood string }
食べることができる動物のリストを作成するには草:
list := []*GrassEatingAnimal{}
動物をリストに追加するには:
animal := &GrassEatingAnimal{SuitableFood: "Grass"} list = append(list, animal)
このアプローチでは、言語に比べて手作業が多くなりますが、特定のタイプのフィールドを持つコンテナーを作成する方法が提供されます。ジェネリック医薬品を使用します。
以上がジェネリックを使用せずに Go でジェネリック リストと型固有のコンテナを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。