Maison > développement back-end > Golang > Pourquoi une tranche nulle transmise à une interface dans Go n'est-elle pas égale à zéro ?

Pourquoi une tranche nulle transmise à une interface dans Go n'est-elle pas égale à zéro ?

Barbara Streisand
Libérer: 2024-11-04 01:28:03
original
313 Les gens l'ont consulté

Why Does a Nil Slice Passed to an Interface in Go Not Equal Nil?

Comprendre le paradoxe de la tranche nulle dans les interfaces Go

Lorsque vous passez une tranche nulle en tant qu'interface, pourquoi le résultat n'est-il pas nul ? Ce comportement déroutant peut s'expliquer par la compréhension de l'implémentation sous-jacente des interfaces Go.

Dans Go, une variable interface{} est essentiellement une structure à deux champs, composée d'un descripteur de type et d'une valeur de données, comme illustré par le Iface struct :

struct Iface {
    Itab*   tab;
    void*   data;
};
Copier après la connexion

Maintenant, analysons les deux appels de fonction dans le code fourni :

<code class="go">yes([]int{}) // output: true
no([]int{})  // output: false</code>
Copier après la connexion

oui Fonction :

Dans la fonction yes, la valeur []int{} est passée comme paramètre. Puisque yes n'accepte qu'un paramètre slice, le compilateur traite nil comme une tranche de valeur nulle. Ainsi, la comparaison thing == nil devient nil == nil, qui renvoie true.

no Function :

En revanche, la fonction no attend une interface{} paramètre. Lorsque vous transmettez la valeur []int{}, Go l'enveloppe automatiquement dans un type interface{}. le convertissant efficacement en interface{[]int, nil}. La comparaison thing == nil est maintenant évaluée comme interface{[]int, nil} == nil, ce qui donne false.

Ce comportement est clarifié davantage dans la FAQ Go, qui explique que « les interfaces contenant nil ne sont que égal à nul si tous leurs membres sont nuls" (c'est-à-dire dans le cas de cet exemple, []int (le membre de type) ne peut pas être nul).

Par conséquent, lorsqu'il s'agit de tranches nulles dans les interfaces, c'est Il est crucial d'être conscient de cette bizarrerie et de considérer l'implémentation sous-jacente pour interpréter correctement le comportement.

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