Anexando duas fatias em go (o que há com isso `…`?)

É assim que se pode anexar duas fatias no Go:

slice1 := []int{0, 1, 2, 3, 4}
slice2
:= []int{5, 6, 7, 8}
fmt
.Println(append(slice1, slice2...))

Executar os códigos acima produzirá:

[0 1 2 3 4 5 6 7 8]

Observe que o ...anexado a slice2informa ao compilador para tratar slice2como uma lista de argumentos. Se removemos o ..., alterando as chamadas de função para se parecerem com:

fmt.Println(append(slice1, slice2))

o compilador vai reclamar dizendo isso cannot use slice2 (type []int) as type int in append.

Dar uma olhada na assinatura do produto appendfornece mais pistas.

func append(slice []Type, elems ...Type) []Type

Nossas chamadas de função acima informam ao compilador que nosso Typeé int. Portanto, a menos que anexar ...a slice2, o compilador irá emitir um “erro de incompatibilidade de tipo”, esperando a sua pós-primeiro argumento para ser um número arbitrário de variáveis do tipo int, mas em vez de ser dada uma variável do tipo []int.