Sobes.tech
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)