Avatar ·

Em Go, map é passado por valor ou por referência? Por que as alterações dentro da função são visíveis do lado de fora?

Olá a todos! Acabei de começar a estudar Go e não consigo entender como os maps são passados para funções. Escrevi o seguinte código: ```go package main import "fmt" func modifyMap(m map[string]int) { m["key"] = 42 fmt.Println("Dentro da função:", m) } func main() { myMap := map[string]int{"key": 0} fmt.Println("Antes da chamada:", myMap) modifyMap(myMap) fmt.Println("Depois da chamada:", myMap) } ``` Saída: ``` Antes da chamada: map[key:0] Dentro da função: map[key:42] Depois da chamada: map[key:42] ``` Eu esperava que o map fosse passado por valor (como int ou string), e que as alterações dentro da função não afetassem o map original. Mas, por algum motivo, elas afetam! Além disso, se eu tentar fazer o mesmo com um array: ```go func modifyArray(arr [3]int) { arr[0] = 100 } func main() { a := [3]int{1, 2, 3} modifyArray(a) fmt.Println(a) // [1 2 3] — sem alterações! } ``` O array se comporta como um valor comum. Qual é a diferença? Map é passado