Maison >développement back-end >Golang >Comment puis-je implémenter des listes génériques et des conteneurs spécifiques à un type dans Go Without Generics ?

Comment puis-je implémenter des listes génériques et des conteneurs spécifiques à un type dans Go Without Generics ?

DDD
DDDoriginal
2024-12-16 20:11:14624parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn