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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 07:20:03704parcourir

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>

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!

Déclaration:
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