Senior
Qual é a diferença entre um array e um slice em Go?
sobes.tech IA
Resposta da IA
Em Go, um array é uma estrutura de tamanho fixo, cujo tamanho é definido na declaração e não pode ser alterado. Os arrays armazenam os elementos de forma contígua na memória e, ao serem passados para uma função, são copiados por completo.
Um slice é um tipo dinâmico e mutável em tamanho, que representa uma referência a uma secção sequencial de um array. Um slice contém um ponteiro para o primeiro elemento, o comprimento e a capacidade.
Diferenças principais:
- O tamanho do array é fixo, o do slice é dinâmico.
- Ao passar, um array é copiado, enquanto um slice é passado por referência ao array subjacente.
- Um slice pode ser expandido (append), um array não.
Exemplo:
var arr [3]int = [3]int{1, 2, 3} // array de tamanho fixo
slice := arr[0:2] // slice referindo-se aos dois primeiros elementos do array
slice = append(slice, 4) // o slice é expandido, possivelmente criando um novo array subjacente
Assim, os slices são úteis para trabalhar com coleções dinâmicas, enquanto os arrays são adequados para conjuntos de dados fixos.