ExpertiDict

Go · Avançado · Português · Técnico

representação de interface

/ʁe.pɾe.zẽ.ta.ˈsɐ̃w̃ ʤi ĩ.teʁ.ˈfej.si/substantivo

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

Veja também

Todos os termos de Go