Maison > Article > développement back-end > Pourquoi `nil([]int)` est-il égal à `nil`, mais pas `nil(interface{})` ?
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>
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!