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.

questionAnswers(2)

yourAnswerToTheQuestion