Sobes.tech
Junior — Middle

Quelle est la différence entre l'expression d'une interface vide et la valeur nil dans le langage Go ?

sobes.tech IA

Réponse de l'IA

Dans le langage Go, l'interface vide (interface{}) est un type qui peut contenir une valeur de n'importe quel type, y compris nil. Cependant, l'expression d'une interface vide et la valeur nil sont deux choses différentes.

  • var x interface{} — une variable x de type interface vide, qui par défaut est égale à nil, c'est-à-dire qu'elle ne contient ni type ni valeur.
  • Mais si on assigne une valeur à x, par exemple x = 5, alors x n'est plus nil, car il contient le type int et la valeur 5.

La différence réside dans le fait que l'interface en Go est représentée en interne par deux pointeurs : un vers le type et un vers la valeur. L'interface est égale à nil uniquement si ces deux pointeurs sont nil.

Exemple :

var i interface{} // i == nil
var p *int = nil

 i = p // i != nil, car le type *int est présent, même si la valeur est nil

fmt.Println(i == nil) // false

Ainsi, une interface vide peut contenir une valeur nil d'un type spécifique, mais l'interface elle-même ne sera pas égale à nil. C'est un point important lors des vérifications de nil en Go.