Avatar ·

Por que copy() não copia um slice em Go? Ou estou fazendo algo errado?

Olá a todos! Comecei a estudar Go recentemente e me deparei com um problema estranho ao trabalhar com slices. Precisava duplicar um slice em outro para depois modificar a cópia independentemente do original. Li que para isso existe a função embutida `copy()`. \n\nEscrevi o seguinte código:\n\n```go\npackage main\n\nimport "fmt"\n\nfunc main() {\n original := []int{1, 2, 3, 4, 5}\n var copySlice []int\n copy(copySlice, original)\n fmt.Println("original:", original)\n fmt.Println("copy:", copySlice)\n}\n```\n\nMas na saída obtive um slice vazio! `copySlice` permaneceu `[]`. Eu esperava que após `copy()`, `copySlice` tivesse os mesmos elementos que `original`.\n\nDepois tentei outra abordagem — primeiro declarei um slice com comprimento, mas sem valor:\n\n```go\ncopySlice2 := make([]int, len(original))\ncopy(copySlice2, original)\n```\n\nE isso funcionou! Mas por que a primeira opção não funciona? Na documentação diz que `copy` copia elementos, mas não explica por que um slice vazio não...