Maison > développement back-end > Golang > Pourquoi `nil([]int)` est-il égal à `nil`, mais pas `nil(interface{})` ?

Pourquoi `nil([]int)` est-il égal à `nil`, mais pas `nil(interface{})` ?

Patricia Arquette
Libérer: 2024-11-03 07:20:03
original
765 Les gens l'ont consulté

Why Does `nil([]int)` Equal `nil`, But `nil(interface{})` Doesn't?

Nil Slice vs. Nil Interface

Dans Go, une tranche nulle n'est pas la même chose qu'une interface nulle. Ce comportement est démontré dans le code suivant :

<code class="go">package main

import "fmt"

func main() {
    var i []int = nil
    yes(i) // output: true
    no(i)  // output: false
}

func yes(thing []int) {
    fmt.Println(thing == nil)
}

func no(thing interface{}) {
    fmt.Println(thing == nil)
}</code>
Copier après la connexion

La différence de sortie entre les deux fonctions est due à la façon dont Go gère les types d'interface.

Types d'interface

Un type d'interface dans Go est un ensemble de méthodes qui peuvent être implémentées par un type de valeur spécifique. Lorsqu'une variable interface{} est utilisée, elle peut contenir n'importe quelle valeur de n'importe quel type qui implémente l'interface.

Nil Interface

Lorsqu'une variable interface{} est attribuée à nil, le champ data de l'interface est mis à nil, mais le champ type ne l'est pas. Par conséquent, une interface nulle n'est pas égale à zéro.

Nil Slice

D'un autre côté, une tranche nulle est simplement une tranche sans éléments. Lorsque vous comparez une tranche nulle à nulle, la comparaison est évaluée comme vraie car les champs de données et de type de la tranche sont définis sur zéro.

Conclusion

Par conséquent, la différence de sortie entre les deux fonctions dans l'exemple de code est due au fait que nil([]int) est une tranche nulle, tandis que nil(interface{}) est une interface nulle. Une tranche nulle est évaluée à vrai par rapport à zéro, tandis qu'une interface nulle est évaluée à faux.

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