Implémentation de listes génériques
Go ne prend pas en charge nativement les génériques, mais il offre un approche alternative utilisant un type d’interface vide appelé Any. Cette interface sert d'espace réservé pour tout type de données.
type Any interface{}
Pour vérifier si une valeur Any est nulle, vous pouvez utiliser le package Reflect pour examiner son type sous-jacent.
if reflect.ValueOf(value).IsNil() { // Value is nil }
Conception de types de données algébriques
Les types de données algébriques, tels que l'exemple de type Haskell fourni, peuvent être implémenté dans Go à l'aide d'interfaces. Par exemple, pour représenter une liste chaînée :
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] }
Conteneur pour objets avec des types de champs spécifiques
Go ne prend pas en charge les paramètres de type comme le fait Scala. Cependant, vous pouvez créer un type qui garantit la présence d'un 特定字段类型.
type Animal interface { SuitableFood() string } type GrassEatingAnimal struct { SuitableFood func() string }
Vous pouvez obtenir une fonctionnalité similaire en utilisant une carte générique :
type AnimalMap[K Comparable, V Animal] map[K]V
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!