Go · Avançado · Inglês · Técnico
slice header
Estrutura interna de três palavras (ponteiro para o array, len e cap) que representa um slice. Atribuir ou passar um slice copia esse cabeçalho, não os dados.
Onde usar
Explica por que um append dentro de uma função não altera o slice do chamador: ela recebeu uma cópia do cabeçalho, com o próprio len. Aparece em entrevistas e em bugs de append.
Em código
func grow(s []int) { s = append(s, 1) }
s := make([]int, 0, 4)
grow(s)
fmt.Println(len(s)) // 0
fmt.Println(s[:1]) // [1]Exemplos
The function got a copy of the slice header, so the length didn't change.
A função recebeu uma cópia do slice header, então o tamanho não mudou.
A slice header is just a pointer, a length and a capacity.
Um slice header é só um ponteiro, um tamanho e uma capacidade.
Cuidado
Os elementos continuam compartilhados, mas len e cap são copiados: mudar o tamanho na cópia não muda o original.
Sinônimos
cabeçalho do slice