ExpertiDict

Go · Essencial · Português · Técnico

passagem por valor

/pa.ˈsa.ʒẽj poʁ va.ˈloʁ/substantivo

Em Go todo argumento é copiado ao chamar uma função, que altera só a cópia. Para alterar o original, passa-se um ponteiro.

Onde usar

No code review: 'essa função não muda a struct porque recebeu uma cópia'. Slices, maps e canais também são copiados, mas a cópia aponta para os mesmos dados.

Em código

func inc(n int)  { n++ }
func incP(n *int) { *n++ }
x := 1
inc(x)
incP(&x)
fmt.Println(x) // 2

Exemplos

Como é passagem por valor, a função só mexeu na cópia.

Passa um ponteiro, senão a mudança some quando a função retorna.

Cuidado

Não existe passagem por referência em Go: passar um ponteiro ainda copia o ponteiro, ou seja, o endereço.

Sinônimos

pass by value

Veja também

Todos os termos de Go