Golang passando matrizes para a função e modificando-a
Na maioria das linguagens (como c ++), as matrizes passantes resultam em passá-las implicitamente por uma referência; portanto, qualquer alteração na matriz passada na função resultará na alteração da matriz original. Estou aprendendo Golang e no livro "The Go Programming Language" de Alan A.A. Donovan e Brian W. Kernighan Dizem que seu comportamento é diferente de outras linguagens - não passa implicitamente matriz por referência.
Está me confundindo um pouco - isso não significa que a passagem de uma matriz sem a referência não deve modificar a própria matriz? Deixe-me ilustrar isso:
func main() {
tab := []int{1, 2, 3}
fmt.Println(tab)
// Results in [1 2 3]
reverse(tab)
fmt.Println(tab)
// Results in [3 2 1]
}
func reverse(tab []int) {
for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
tab[i], tab[j] = tab[j], tab[i]
}
}
No código acima, o array não é passado pela referência, mas a função reversa modifica o original, portanto funciona um pouco como o programa C ++ faria. Alguém poderia me explicar a diferença?
PS: Desculpe se é uma pergunta idiota, sou totalmente novo no Golang e estou tentando entender bem o básico.