Sobes.tech
Junior — Middle

¿En qué se diferencia la expresión de una interfaz vacía del valor nil en el lenguaje Go?

sobes.tech AI

Respuesta de la IA

En el lenguaje Go, la interfaz vacía (interface{}) es un tipo que puede contener un valor de cualquier tipo, incluido nil. Sin embargo, la expresión de una interfaz vacía y el valor nil son cosas diferentes.

  • var x interface{} — una variable x de tipo interfaz vacía, que por defecto es igual a nil, es decir, no contiene ni tipo ni valor.
  • Pero si se le asigna a x algún valor, por ejemplo x = 5, entonces x ya no es nil, ya que contiene el tipo int y el valor 5.

La diferencia radica en que la interfaz en Go está representada internamente por dos punteros: uno al tipo y otro al valor. La interfaz es igual a nil solo si ambos punteros son nil.

Ejemplo:

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

 i = p // i != nil, ya que el tipo *int está presente, aunque el valor sea nil

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

Por lo tanto, una interfaz vacía puede contener un valor nil de un tipo específico, pero la interfaz en sí misma no será igual a nil. Esto es un punto importante al realizar verificaciones de nil en Go.