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ávelxdo tipo interface vazia, que por padrão é igual anil, ou seja, não contém nem tipo nem valor.- Mas se atribuir a
xalgum valor, por exemplox = 5, entãoxjá não énil, pois contém o tipointe o valor5.
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.