Sobes.tech
Junior — Middle

Qual é a diferença entre uma interface vazia e o valor nil na linguagem Go?

sobes.tech IA

Resposta da IA

Na linguagem Go, a interface vazia (interface{}) é um tipo que pode conter um valor de qualquer tipo, incluindo nil. No entanto, a expressão de uma interface vazia e o valor nil são coisas diferentes.

  • var x interface{} — uma variável x do tipo interface vazia, que por padrão é igual a nil, ou seja, não contém nem tipo nem valor.
  • Mas se atribuir a x algum valor, por exemplo x = 5, então x já não é nil, pois contém o tipo int e o valor 5.

A diferença está no fato de que a interface em Go é representada internamente por dois ponteiros: um para o tipo e outro para o valor. A interface é igual a nil somente se ambos os ponteiros forem nil.

Exemplo:

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

 i = p // i != nil, pois o tipo *int está presente, mesmo que o valor seja nil

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

Portanto, uma interface vazia pode conter um valor nil de um tipo específico, mas a própria interface não será igual a nil. Este é um ponto importante ao fazer verificações de nil em Go.