Sobes.tech
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.