Junior
¿Cuál es la diferencia clave entre slices y arrays en Go?
sobes.tech AI
Respuesta de la IA
Los slices son vistas de arrays que pueden cambiar dinámicamente.
| Característica | Array | Slice |
|---|---|---|
| Tamaño | Fijo, determinado en la creación | Dinámico, puede cambiar |
| Tipo | [n]T (donde n es tamaño, T es tipo) |
[]T (donde T es tipo) |
| Paso en funciones | Por valor (copia) | Por referencia al array subyacente, se pasan head, len y cap (de hecho, se crea una nueva estructura SliceHeader con copias de estos campos) |
| Creación | var a [5]int o b := [3]string{"a", "b", "c"} |
var s []int o t := []int{1, 2, 3} o u := make([]int, 5) |
| Rendimiento | Más predecible debido a tamaño fijo, puede ser mejor en tamaños pequeños | Puede tener costos adicionales al cambiar tamaño (reasignación del array subyacente) |
// Ejemplo de array
var arr [3]int = [3]int{1, 2, 3}
// Ejemplo con slice creado a partir del array
slice := arr[1:] // slice {2, 3}
// Ejemplo de creación de slice
s := []int{10, 20, 30} // array subyacente {10, 20, 30}, len = 3, cap = 3
// Modificación del slice
s = append(s, 40) // ahora s {10, 20, 30, 40}. Si no hay capacidad suficiente, se crea un nuevo array subyacente, len = 4, cap = 6 (normalmente duplicando la capacidad).
// Modificación de un elemento del slice modifica el array subyacente
slice[0] = 99 // arr ahora {1, 99, 3}
fmt.Println(arr)