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