Go · Avançado · Português · Técnico
representação de interface
Forma como o runtime guarda um valor de interface: um par com o tipo dinâmico (ou a tabela de métodos) e um ponteiro para o dado.
Onde usar
Explica por que uma interface com ponteiro nil não é nil, por que colocar valores em interface pode alocar e por que a chamada de método custa um desvio indireto.
Em código
var p *int
var a any = p
var e error
fmt.Println(a == nil, e == nil)
fmt.Printf("%T %v\n", a, a)
fmt.Println(unsafe.Sizeof(a)) // 16 (64 bits)Exemplos
Pela representação de interface, o par tipo e valor precisa ser nil para a comparação dar verdadeiro.
Guardar um int numa interface pode alocar, por causa da representação de interface.
Cuidado
A interface vazia guarda só o tipo e o dado; a com métodos guarda uma tabela de métodos (itab). Não dependa desse layout no código.
Sinônimos
iface e eface