Avatar ·

¿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