Slices: longitud y capacidad en Go
Un slice es una vista: puntero, longitud, capacidad — y append puede copiar o no.
func internals() (int, int, bool) {
backing := make([]int, 0, 8)
backing = append(backing, 1, 2, 3)
shared := backing[:2]
shared = append(shared, 99) // escribe en backing[2]
aliased := backing[2] == 99
capped := backing[:2:2]
capped = append(capped, 7) // debe reservar: la capacidad está llena
snapshot := make([]int, len(backing))
copy(snapshot, backing)
return len(backing), cap(backing), aliased && capped[2] == 7
}
Cómo funciona
appendreutiliza el arreglo de respaldo mientras la capacidad alcance.- Un slice de tres índices limita la capacidad, así que append debe copiar.
copyes la forma de tomar una instantánea real.
Palabras clave y builtins usados aquí
appendboolcapcopyfuncintlenmakereturn
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 424
- Tokens
- 117
- Ritmo de tres estrellas
- 90 tpm
Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 78 segundos.
Paso 3 de 9 en Arreglos, slices y mapas; paso 18 de 30 en Fundamentos del lenguaje.