Tout type et implémentation de listes génériques dans Go
Dans la programmation Go, le manque de génériques peut poser des défis en matière d'implémentation de la structure de données . Abordons deux problèmes courants :
1. Implémentation de listes génériques
Go ne prend pas directement en charge les génériques, mais il fournit le type interface{} pour représenter n'importe quelle valeur. Cette interface peut être utilisée pour créer des structures de données « génériques » pouvant contenir des valeurs de n'importe quel type.
Cependant, l'utilisation de interface{} a ses inconvénients, car vous devez saisir manuellement les valeurs lorsque vous y accédez. Par exemple, le code suivant définit une liste d'interface{} :
type AnyList []interface{}
Pour ajouter un entier à la liste :
list := AnyList{1}
Pour récupérer l'entier, vous devez taper assert it revenir à son type d'origine :
value := list[0].(int)
2. Création de conteneurs avec des champs de types spécifiques
Dans Go, il n'y a pas d'équivalent direct aux types de données algébriques comme List a dans Haskell ou val List[Animal { type ConvientFood = Grass} ] dans Scala. Cependant, vous pouvez utiliser une combinaison d'interfaces et d'intégration pour obtenir des résultats similaires.
Par exemple, vous pouvez définir une interface pour les animaux :
type Animal interface { GetSuitableFood() string }
Vous pouvez ensuite définir une structure pour les animaux qui ont un champ "SuitableFood" de type chaîne :
type GrassEatingAnimal struct { Animal SuitableFood string }
Pour créer une liste d'animaux pouvant manger herbe :
list := []*GrassEatingAnimal{}
Pour ajouter un animal à la liste :
animal := &GrassEatingAnimal{SuitableFood: "Grass"} list = append(list, animal)
Cette approche permet de créer des conteneurs avec des champs de types spécifiques, mais avec plus d'effort manuel que les langues avec des génériques.
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!