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
Libérer: 2024-12-16 20:11:14
original
549 Les gens l'ont consulté

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{}
Copier après la connexion

Pour ajouter un entier à la liste :

list := AnyList{1}
Copier après la connexion

Pour récupérer l'entier, vous devez taper assert it revenir à son type d'origine :

value := list[0].(int)
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

Pour créer une liste d'animaux pouvant manger herbe :

list := []*GrassEatingAnimal{}
Copier après la connexion

Pour ajouter un animal à la liste :

animal := &GrassEatingAnimal{SuitableFood: "Grass"}
list = append(list, animal)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal