Isso explica a função de acréscimo para fatias.
Como diz, append retorna a fatia atualizada.
Então, isso significa que a fatia recém-criada não compartilha a matriz subjacente com a fatia existente?
No caso de outras operações de fatia, como mySlice[x:y], a nova fatia compartilharia a matriz subjacente com mySlice, como mostrado .
PS: Código de teste:
var names = make([]string, 4, 10)
names1 := append(names, "Tom")
Portanto, neste caso, há capacidade suficiente disponível em nomes. Portanto, o acréscimo não deve criar uma nova matriz subjacente.
Isso gera:
[ ]
[ Tom]
A saída não deveria ser a mesma que a matriz subjacente é compartilhada?
Certamente estou perdendo algo muito básico aqui.
Append retorna uma nova estrutura de fatia, mas a matriz subjacente pode ser compartilhada ou não, dependendo da capacidade: se a capacidade for suficiente, ela será compartilhada, caso contrário, não.
Slice struct tem comprimento, capacidade e ponteiro para campos de matriz subjacentes:
Aqui estão alguns exemplos:
Você está certo,
names1
usa a mesma matriz subjacente quenames
.E não, a saída não deve ser a mesma, pois
names
tem comprimento 4, enquantonames1
tem comprimento 5. Observe que ambos possuem capacidade (10).Aqui está um exemplo, que pode esclarecer um pouco: