¿Afectará pasar una copia a una función sin un puntero al array original?
sobes.tech AI
Respuesta de la IA
En Go, un slice es una estructura que contiene un puntero a un array, una longitud y una capacidad. Cuando pasas un slice a una función sin un puntero, se copia la estructura del slice en sí, pero no se copia el array subyacente.
Esto significa que los cambios en los elementos del slice dentro de la función afectarán al array original, ya que ambos slices apuntan al mismo array. Sin embargo, si dentro de la función cambias el propio slice (por ejemplo, asignándole un nuevo slice o cambiando su longitud), esos cambios no afectarán al slice fuera de la función.
Ejemplo:
func modifySlice(s []int) {
s[0] = 100 // cambiará el array original
s = append(s, 200) // cambiará el slice local, no afecta al externo
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // Imprimirá [100 2 3]
}
En resumen: pasar un slice sin un puntero permite modificar los elementos del array original, pero no permite cambiar el propio slice (su longitud, puntero) fuera de la función.