ジェネリック リストの実装
Go はジェネリックをネイティブにサポートしていませんが、 Any という空のインターフェイス タイプを使用する代替アプローチ。このインターフェイスは、あらゆるデータ型のプレースホルダーとして機能します。
type Any interface{}
Any 値が nil かどうかを確認するには、reflect パッケージを使用してその基になる型を調べることができます。
if reflect.ValueOf(value).IsNil() { // Value is nil }
代数データ型の設計
次のような代数データ型Haskell のようなサンプルが提供されており、インターフェイスを使用して Go で実装できます。たとえば、リンク リストを表す場合:
type List[T Any] interface { Head() T Tail() List[T] } // Nil list type Nil[T Any] struct{} // Cons list type Cons[T Any] struct { head T tail List[T] }
特定のフィールド型を持つオブジェクトのコンテナ
Go は、Scala のように型パラメーターをサポートしません。ただし、特定のフィールド型の存在を保証する型を作成できます。
type Animal interface { SuitableFood() string } type GrassEatingAnimal struct { SuitableFood func() string }
汎用マップを使用すると、同様の機能を実現できます。
type AnimalMap[K Comparable, V Animal] map[K]V
以上がネイティブ サポートなしで、ジェネリックおよび代数データ型を模倣するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。