DEV Community

Cover image for Arrays e Slices em go
Maycon Jesus
Maycon Jesus

Posted on • Edited on

Arrays e Slices em go

Arrays (Tamanho Fixo)

Em Go, arrays têm tamanho fixo, ou seja, o número de elementos não pode ser alterado depois que o array é criado.

Exemplo de Array com Tamanho Fixo:

var sites [4]string
Enter fullscreen mode Exit fullscreen mode
  • O array sites pode armazenar exatamente 4 elementos do tipo string.
  • O tamanho do array é uma parte de seu tipo, então arrays com diferentes tamanhos são considerados tipos diferentes.

Slices (Tamanho Dinâmico)

Diferente dos arrays, slices podem ter tamanho variável e são mais flexíveis. Eles são usados com mais frequência devido à sua capacidade de crescer e diminuir dinamicamente.

Exemplo de Slice (Tamanho Dinâmico):

var sites []string
Enter fullscreen mode Exit fullscreen mode
  • sites é um slice de string, sem um tamanho fixo, que pode ser redimensionado conforme necessário.
  • Diferente dos arrays, slices não são definidos com um número fixo entre os colchetes.

Inicializando Arrays e Slices com Itens

Inicializando Arrays com Tamanho Fixo:

Quando você inicializa um array com valores, o tamanho deve ser explicitamente definido.

var strs = [2]string{"aaa", "bbb"}
Enter fullscreen mode Exit fullscreen mode
  • Aqui, o array strs tem exatamente 2 elementos do tipo string.

Inicializando Slices com Tamanho Dinâmico:

Slices podem ser inicializados sem precisar especificar um tamanho fixo entre os colchetes.

var strs = []string{"aaa", "bbb"}
Enter fullscreen mode Exit fullscreen mode
  • Neste caso, strs é um slice de string com dois elementos, mas o número de elementos pode crescer ou diminuir ao longo do tempo.

Métodos Importantes

1. append()

O método append() é usado para adicionar elementos a um slice. Se o slice atingir sua capacidade máxima, o append() automaticamente cria um novo slice com maior capacidade.

Exemplo de uso de append:

var strs = []string{"aaa", "bbb"}
strs = append(strs, "ccc", "ddd")
fmt.Println(strs) // Saída: [aaa bbb ccc ddd]
Enter fullscreen mode Exit fullscreen mode
  • Aqui, dois novos elementos são adicionados ao slice strs. O slice cresce dinamicamente conforme necessário.
  • A função append() sempre retorna um novo slice, pois o slice original pode ter sua capacidade aumentada.

2. len()

O método len() retorna o número de elementos no slice (ou array).

Exemplo de uso de len:

var strs = []string{"aaa", "bbb", "ccc"}
fmt.Println(len(strs)) // Saída: 3
Enter fullscreen mode Exit fullscreen mode
  • O len(strs) retorna 3, que é o número de elementos atualmente no slice strs.

3. cap()

O método cap() retorna a capacidade total do slice, ou seja, o número de elementos que ele pode armazenar antes de precisar ser realocado.

Exemplo de uso de cap:

var strs = []string{"aaa", "bbb"}
fmt.Println(cap(strs)) // Saída: 2 (dependendo do tamanho inicial do slice)
Enter fullscreen mode Exit fullscreen mode
  • A função cap(strs) retorna a capacidade do slice strs, que pode ser diferente do número de elementos (retornado por len()).
  • Em um slice, a capacidade pode ser maior que o número de elementos, permitindo que o slice cresça sem realocações imediatas.

Diferenças Principais

  • Arrays: Têm tamanho fixo e o tamanho é parte do tipo.
  • Slices: Têm tamanho dinâmico e são mais flexíveis para o uso diário em Go. Slices podem crescer conforme necessário usando o método append().

Resumo de Funções

  • append(slice, elements...): Adiciona elementos ao slice.
  • len(slice): Retorna o número de elementos no slice.
  • cap(slice): Retorna a capacidade do slice.

Top comments (0)