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 variablexde 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 exemplex = 5, alorsxn'est plusnil, car il contient le typeintet la valeur5.
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.