¿En Go map se pasa por valor o por referencia? ¿Por qué los cambios dentro de la función son visibles desde fuera?
¡Hola a todos! Acabo de empezar a aprender Go y no puedo entender cómo se pasan los map a las funciones.
Escribí este código:
```go
package main
import "fmt"
func modifyMap(m map[string]int) {
m["key"] = 42
fmt.Println("Dentro de la función:", m)
}
func main() {
myMap := map[string]int{"key": 0}
fmt.Println("Antes de llamar:", myMap)
modifyMap(myMap)
fmt.Println("Después de llamar:", myMap)
}
```
Salida:
```
Antes de llamar: map[key:0]
Dentro de la función: map[key:42]
Después de llamar: map[key:42]
```
Esperaba que el map se pasara por valor (como int o string), y que los cambios dentro de la función no afectaran al map original. ¡Pero por alguna razón sí afectan!
Mientras tanto, si intento hacer lo mismo con un 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] — ¡sin cambios!
}
```
El array se comporta como un valor normal. ¿Cuál es la diferencia? Map se pasa