Question Que signifie nul en golang?


Il y a beaucoup de cas utilisant néant au golang. Par exemple:

func (u *URL) Parse(ref string) (*URL, error) {
    refurl, err := Parse(ref)
    if err != nil {
        return nil, err
    }
    return u.ResolveReference(refurl), nil
}

mais on ne peut pas l'utiliser comme ça:

var str string //or var str int
str = nil

le compilateur golang lancera un can't use nil as type string in assignment Erreur.

Ressemble à nil ne peut être utilisé que pour un pointeur de structure et d’interface. Si tel est le cas, alors Qu'est-ce que ça veut dire? et quand on l'utilise pour se comparer à l'autre objet, comment se comparent-ils, en d'autres termes, comment golang détermine-t-il qu'un objet est nul??

EDIT: Par exemple, si une interface est nulle, son type et sa valeur doivent être nuls en même temps. Comment golang fait-il cela?


12
2018-03-14 08:56


origine


Réponses:


Dans Go, nil est le Valeur nulle pour les pointeurs, interfaces, cartes, tranches, canaux et types de fonctions, représentant un non initialisé valeur.

nil ne signifie pas un état "indéfini", c'est une valeur propre en soi. Un objet dans Go est nil simplement si et seulement si sa valeur est nil, ce qui ne peut être que s'il s'agit d'un des types susmentionnés.

Un error est une interface, donc nil est une valeur valide pour un, contrairement à un string. Pour des raisons évidentes nil erreur représente pas d'erreur.


43
2018-03-14 09:21



nil dans Go est simplement le NULL valeur du pointeur d'autres langues.

Vous pouvez l'utiliser efficacement à la place de tout pointeur ou interface (les interfaces sont en quelque sorte des pointeurs).

Vous pouvez l'utiliser comme une erreur, car le le type d'erreur est une interface.

Vous ne pouvez pas l'utiliser comme une chaîne car dans Go, une chaîne est une valeur.

nil n'est pas typé dans Go, ce qui signifie que vous ne pouvez pas faire cela:

var n = nil

Car ici, il vous manque un type pour n. Cependant, vous pouvez faire

var n *Foo = nil

Notez que nil étant la valeur zéro des pointeurs et des interfaces, les pointeurs et les interfaces non initialisés seront nil.


1
2018-03-14 09:04