Go · Essencial · Português · Técnico
passagem por valor
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) // 2Exemplos
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