Maison >développement back-end >Golang >Comment puis-je gérer les 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.
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.
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 :
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!