Maison > développement back-end > Golang > Comment renvoyer les valeurs par défaut pour les types génériques dans Go ?

Comment renvoyer les valeurs par défaut pour les types génériques dans Go ?

Linda Hamilton
Libérer: 2024-12-19 02:24:09
original
965 Les gens l'ont consulté

How to Return Default Values for Generic Types in Go?

Renvoi des valeurs par défaut pour les types génériques dans Go

Dans Go, comment pouvez-vous renvoyer une valeur par défaut pour un type générique T ? Considérez le code suivant :

type mylist[T any] struct {
    first *node[T]
}

type node[T any] struct {
    data T
    next *node[T]
}

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

Lorsque vous essayez de compiler ce code, vous pouvez rencontrer l'erreur :

cannot use nil as T value in return statement
Copier après la connexion

Le problème du retour de Nil

Renvoyer nil pour un type générique n'est pas autorisé dans Go. En effet, nil n'est pas une valeur valide pour tous les types. Par exemple, si T est un entier, renvoyer zéro n’aurait aucun sens. De même, nil n'est pas une valeur valide pour les structures.

Renvoi de la valeur zéro

Au lieu de renvoyer nil, vous devez renvoyer la valeur zéro pour l'argument de type utilisé pour T. La valeur zéro est nulle pour les pointeurs et les tranches, la chaîne vide pour les chaînes et 0 pour les entiers et les virgules flottantes. nombres.

Pour renvoyer la valeur zéro, vous pouvez déclarer une variable de type T et la renvoyer :

func getZero[T any]() T {
    var result T
    return result
}
Copier après la connexion

Test de la fonction de valeur zéro

Voici un exemple de comment tester le getZero function :

package main

import "fmt"

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

Sortie :

int 0
string ""
image.Point {0, 0}
*float64 <nil>
Copier après la connexion

Cela montre que la fonction getZero renvoie les valeurs zéro attendues pour différents types.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal