ホームページ > バックエンド開発 > Golang > ジェネリックを使用せずに Go でジェネリック リストと型固有のコンテナを実装するにはどうすればよいですか?

ジェネリックを使用せずに Go でジェネリック リストと型固有のコンテナを実装するにはどうすればよいですか?

DDD
リリース: 2024-12-16 20:11:14
オリジナル
556 人が閲覧しました

How Can I Implement Generic Lists and Type-Specific Containers in Go Without Generics?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート