Sobes.tech
Junior — Middle

Quando na programação uma interface pode ter o valor nil ou ser indefinida?

sobes.tech IA

Resposta da IA

Em Go, uma interface pode ter o valor nil ou estar indefinida nos seguintes casos:

  1. Variável de interface não inicializada Se a variável de interface for declarada, mas não tiver um valor atribuído, ela é igual a nil.

  2. A interface contém um ponteiro nulo Em Go, uma interface consiste em duas partes: tipo e valor. Se o tipo estiver definido, mas o valor for um ponteiro nulo (nil), a interface não é igual a nil, embora o valor interno esteja ausente.

  3. Passar nil para a interface Se passar um valor nil de um tipo específico (por exemplo, (*MyStruct)(nil)) para a interface, ela não será igual a nil, pois o tipo está presente.

Exemplo:

var i interface{} // i == nil

var p *int = nil
i = p // i != nil, pois o tipo *int está presente, mas o valor é nil

if i == nil {
    fmt.Println("i é nil")
} else {
    fmt.Println("i não é nil")
}

É importante considerar isso ao fazer verificações contra nil para evitar falsos positivos.