Maison >développement back-end >Golang >Comment les génériques de Go 1.18 peuvent-ils résoudre le problème de la création de valeurs typées sans provoquer de plantage du programme ?
Comment utiliser les génériques dans Go 1.18 pour créer des valeurs typées
Dans la programmation Go, les génériques permettent la création de code qui fonctionne sur différents types sans avoir besoin d'un casting explicite ou d'assertions de type. Cet article explore comment utiliser des génériques dans Go 1.18 pour créer de nouveaux objets de valeurs typées.
Contexte : exemple de Fruit Factory
Considérez l'exemple simplifié suivant de "Fruit Factory" qui tente de créer de nouvelles instances de fruits de manière générique :
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How do we create a non-nil fruit here? // Returning nil crashes the example. return nil } type Apple struct { color string }
Dans cet exemple, la tâche consiste à compléter la fonction Créer pour créer une nouvelle instance de type T (c'est-à-dire *Apple dans le cas du type Apple). Cependant, renvoyer simplement nil est insuffisant et provoque le crash du programme lors de l'accès aux propriétés de l'objet.
Solution : création d'objets typés
Il existe deux manières principales de créer un nouvelle instance d'une valeur typée utilisant des génériques dans Go 1.18 :
func (f FruitFactory[T]) Create() *T { var a T return &a }
func (f FruitFactory[T]) Create() *T { return new(T) }
Ces solutions permettent à la fonction de créer une valeur non-pointeur (une ou new(T)) et, si nécessaire, convertissez-le en type pointeur en renvoyant son adresse (&a).
Exemple d'implémentation
Dans la "Fruit Factory" exemple :
func (f FruitFactory[T]) Create() *T { var a T return &a } func example() { appleFactory := FruitFactory[Apple]{} apple := appleFactory.Create() apple.color = "red" // No panic now }
Cette modification permet de créer un nouvel objet Apple et de définir ses propriétés sans rencontrer de segmentation faute.
Conclusion
Avec les génériques dans Go 1.18, la programmation avec des valeurs saisies est grandement simplifiée. En tirant parti de l'affectation déclarative ou du mot-clé new, il est possible de créer de manière transparente de nouvelles instances de n'importe quel type, éliminant ainsi le besoin de conversion manuelle et d'assertions de type sujettes aux erreurs.
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!