Sobes.tech
Middle+

Do que é feito um slice, qual é a sua estrutura interna?

sobes.tech IA

Resposta da IA

Em Go, um slice é uma estrutura que contém três campos principais:

  1. Ponteiro para o array — o endereço do primeiro elemento do slice no array interno.
  2. Comprimento (len) — o número de elementos disponíveis no slice.
  3. Capacidade (cap) — o número máximo de elementos que podem ser alojados, começando do ponteiro, sem alocar nova memória.

Internamente, um slice não é um array, mas apenas uma "janela" para uma parte do array. Quando o slice é modificado (por exemplo, adicionando elementos com append), se o comprimento exceder a capacidade, um novo array é criado e os dados são copiados para lá.

Exemplo de estrutura de slice (simplificado):

type SliceHeader struct {
    Data uintptr // ponteiro para o primeiro elemento do array
    Len  int     // comprimento do slice
    Cap  int     // capacidade do slice
}

Isso permite trabalhar de forma eficiente com sequências dinâmicas sem copiar dados ao fazer cortes.