


Comment puis-je gérer les retours de valeurs par défaut pour les types génériques dans Go ?
Implémentation des retours de valeurs par défaut pour les types génériques dans Go
Dans Go, l'absence de valeur nulle dans le langage présente un défi lors du renvoi d'une valeur vide ou par défaut pour types génériques.
Limitations des retours nuls
Considérez la liste générique suivante implémentation :
type mylist[T any] struct { first *node[T] } type node[T any] struct { data T next *next[T] }
Dans cet exemple, nous pourrions définir des méthodes pour afficher et récupérer le premier élément de la liste :
func (list *mylist[T]) pop() T { if list.first != nil { data := list.first.data list.first = list.first.next return data } return nil } func (list *mylist[T]) getfirst() T { if list.first != nil { return list.first.data } return nil }
Cependant, lors de la compilation de ce code, le compilateur lèvera une erreur : "impossible d'utiliser nil comme valeur T dans l'instruction return." Cela se produit parce que Go ne peut pas implicitement attribuer nil à une variable de type générique T.
Solution : renvoyer la valeur zéro
Au lieu de renvoyer nil, nous pouvons renvoyer la valeur zéro pour le type spécifique T utilisé. dans la liste générique. La valeur zéro est :
- Nil pour les pointeurs
- Chaîne vide pour les chaînes
- 0 pour les entiers et les nombres à virgule flottante
Pour y parvenir, nous pouvons déclarer une variable de type T et la renvoyer :
func getZero[T any]() T { var result T return result }
Cette fonction peut maintenant être utilisé pour renvoyer la valeur zéro pour tout type générique. Par exemple, nous pouvons le tester pour différents types :
i := getZero[int]() fmt.Printf("%T %v\n", i, i) s := getZero[string]() fmt.Printf("%T %q\n", s, s) p := getZero[image.Point]() fmt.Printf("%T %v\n", p, p) f := getZero[*float64]() fmt.Printf("%T %v\n", f, f)
Sortie :
int 0 string "" image.Point (0,0) *float64 <nil>
Cette solution vous permet de renvoyer une valeur par défaut ou vide appropriée pour tout type générique dans Go.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement?

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego?

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go?

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go?

Comment écrire des objets et des talons simulés pour les tests en Go?

Comment écrire des fichiers dans GO Language de manière pratique?

Comment rédigez-vous des tests unitaires en Go?

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO?
