ExpertiDict

Go · Intermediário · Inglês · Técnico

pointer receiver

/ˈpɔɪntɚ ɹɪˈsiːvɚ/substantivo

Receiver declarado como *T, que dá ao método acesso ao valor original em vez de uma cópia, permitindo alterá-lo e evitando copiar structs grandes.

Onde usar

Regra comum: se algum método precisa mutar o valor ou a struct é grande, use ponteiro em todos, para não misturar. Se há mutex na struct, o ponteiro é obrigatório.

Em código

type Acc struct{ total int }
func (a *Acc) Add(n int) { a.total += n }
var a Acc
a.Add(5) // vira (&a).Add(5)
fmt.Println(a.total)

Exemplos

This method mutates the struct, so it needs a pointer receiver.

Esse método altera a struct, então precisa de um pointer receiver.

Don't mix pointer and value receivers on the same type.

Não misture pointer receivers e value receivers no mesmo tipo.

Cuidado

Misturar receivers de valor e de ponteiro no mesmo tipo é desencorajado: confunde o method set e quem lê o código.

Sinônimos

receiver de ponteiro

Antônimos

value receiver

Veja também

Todos os termos de Go