Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Slice e declaração
  2. Acessando elemento
  3. Atualizando elemento
  4. Percorrendo um map
  5. Descobrir o tamanho de um map
  6. Excluíndo elemento
  7. Métodos

Slice é um tipo de dado semelhante a um vetor, porém é tipado com base nos elementos contidos, mais flexível e suporta mais métodos.

Em Go podemos declarar um slice utilizando as sintaxes abaixo. Um slice não iniciado possui nil associado e possui tamanho 0.

Sintaxe
variavel :=  []tipo_dado{valores}
Onde
tipo_dado: tipo de dado dos elementos
Exemplo 1
package main

import "fmt"

func main() {

	mslice := []string{"string0", "string1", "string2"}
	fmt.Println(mslice)
}
Saída
[string0 string1 string2]

Um slice pode ser criado a partir de um array baseando-se na sintaxes abaixo:

Sintaxe
nome_slice := array[inicio:fim]
Onde
inicio: índice inicial. 
fim: índice final.

Caso o fim não seja informado, o slice será criado baseado no último elemento do array. Caso o início não seja informado o primeiro elemento será utilizado como índice base. Caso fim seja maior que o tamanho do slice, o último elemento será levado em consideração.

Exemplo 2
package main
import "fmt"

func main() {

	slice := []string{"string0", "string1", "string2"}

	fmt.Println(slice[0:]) 
	fmt.Println(slice[:1]) 
	fmt.Println(slice[1:3]) //fim > tamanho do array
}
Saída
[string0 string1 string2]
[string0]
[string1 string2]

Além das formas acima, um slice também pode ser criado utilizando a função make como na sintaxe abaixo:

Sintaxe
variavel := make([]tipo_slice, tamanho, capacidade)
Exemplo 3
package main

import "fmt"

func main() {

	mslice := make([]string, 3, 5)
	mslice[0] = "string0"
	mslice[1] = "string0"
	mslice[2] = "string0"

	fmt.Println(mslice)
}
Saída
[string0 string0 string0]

O acesso a um elemento de um slice é feito utilizando o indexador [] que recebe um índice como argumento.

Sintaxe
nome_slice[índice]
Onde
indice: índice ou posição do elemento
Exemplo 4
package main
import "fmt"

func main() {

	mslice := []string{"string0", "string1", "string2"}
	fmt.Println(mslice[0])
	valor := mslice[0]
	fmt.Println(valor)
}
Saída
string0 
string0

Caso o índice informado como argumento não exista, um erro de panic será lançado.

Exemplo 5
package main
import "fmt"

func main() {

	mslice := []string{"string0", "string1", "string2"}
	fmt.Println(mslice[3])
}
Saída
panic: runtime error: index out of range [3] with length 3

goroutine 1 [running]:
main.main()
	/home/main.go:7 +0x15

Para atualizar um item ou elemento de um slice, seu índice é passado como argumento para o indexador [] que recebe um valor para alteração.

Sintaxe
nome_slice[índice] = valor
Exemplo 6
package main

import "fmt"

func main() {

	mslice := []string{"string0", "string1", "string2"}
	fmt.Println(mslice[0])
    mslice[0] = "string3"
	fmt.Println(mslice[0])
}
Saída
string0
string3

Para ter conhecimento do número de elementos contidos em um slice, podemos utilizar a função nativa len:

Sintaxe
func len(v Type) int
Onde
v: slice para verificar tamanho
Exemplo 5
package main
import "fmt"

func main() {

	mslice := []string{"string0", "string1", "string2"}
	fmt.Println(len(mslice))
}
Saída
3

Para ter conhecimento da capacidade de um slice, o quanto pode crescer ou diminuir, podemos utilizar a função nativa cap:

Sintaxe
func cap(v Type) int
Onde
v: slice para verificar capacidadee
Exemplo 6
package main
import "fmt"

func main() {

	mslice := make([]string, 3, 5)
	fmt.Println(len(mslice))
	fmt.Println(cap(mslice))
}
Saída
3
5

Para percorrer elemento a elemento de um slice, podemos utilizar o comando de repetição for com auxílio da função range.

Exemplo 7
package main
import "fmt"

func main() {

	mslice := []string{"string0", "string1", "string2"}

	for idx, val := range mslice {
		fmt.Println(idx, val)
	}
}
Saída
0 string0
1 string1
2 string2

Caso seja necessário excluir todos os elementos de um slice, utilizamos a função nativa clear.

Sintaxe
clear(map)
Onde
s: slice para excluir elemento. Sofre alteração
i: índice inicial. Incluído
j: índice final. Não incluído
Exemplo 8
package main
import "fmt"

func main() {

	mslice := make([]string, 3, 5)
	mslice[0] = "string0"
	mslice[1] = "string1"
	mslice[2] = "string2"

	fmt.Println(mslice)
	clear(mslice)
	fmt.Println(mslice)
}
Saída
[string0 string1 string2]
[  ]

Para excluir um os mais elementos de um slice, utilizamos o método Delete do tipo slices:

Sintaxe
func Delete[S ~[]E, E any](s S, i, j int) S
Exemplo 9
package main

import (
	"fmt"
	"slices"
)

func main() {

	mslice := make([]string, 4, 4)
	mslice[0] = "string0"
	mslice[1] = "string1"
	mslice[2] = "string2"
	mslice[3] = "string3"

	fmt.Println(mslice)
	mslice := slices.Delete(mslice, 0, 2)
	fmt.Println(mslice)
}
Saída
[string0 string1 string2 string3]
[string2 string3]

O tipo slice fornece métodos para manipular seus elementos. Esse package é importado utilizando a sintaxe abaixo:

Sintaxe
import "slices"

Abaixo uma tabela com os métodos disponíveis. Clique no link Visitar para ver mais sobre cada função.

Método Descrição Link
All Retorna um iterador índice-valor Visitar
AppendSeq Anexa um slice Visitar
Backward Retorna um iterador índice-valor com índices decrescentes Visitar
BinarySearch Realiza uma busca binária em um slice Visitar
BinarySearchFunc BinarySearch baseado em um função Visitar
Chunk Retorna iterador de subslices Visitar
Clip Remove capacidade não usada de um slice Visitar
Clone Retorna uma cópia Visitar
Collect Retorna elementos de slice em um novo slice Visitar
Compact Remove elementos repetidos Visitar
CompactFunc - Visitar
Concat Concatena slices Visitar
Contains Verifica se um elemento está contido Visitar
ContainsFun - Visitar
Delete Exclui elemento Visitar
DeleteFunc Exclui elemento baseado em função Visitar
Equal Verifica se dois slices possuem os mesmos elementos Visitar
EqualFunc Verifica se dois slices possuem os mesmos elementos baseados em uma função Visitar
Grow Aumenta capacidade de um slice Visitar
Index Retorna índice da primeira ocorrência Visitar
IndexFunc - Visitar
Insert Adiciona um elemento em um map Visitar
IsSorted Verifica se slice está ordenado de forma crescente Visitar
IsSortedFunc - Visitar
Max Retorna o valor máximo Visitar
MaxFunc Retorna o valor máximo baseado em uma função Visitar
Min Retorna valor mínimo Visitar
MinFunc Retorna valor mínimo baseado em um função Visitar
Repeat Repete um slice N vezes Visitar
Replace Substituí elemento Visitar
Reverse Reverte ordem dos elementos Visitar
Sort Ordena um slice de forma crescente Visitar
SortFunc Ordena um slice baseado em uma função Visitar
SortStableFunc - Visitar
Sorted - Visitar
SortedFunc - Visitar
SortedStableFunc - Visitar
Values Retorna um iterador para os valores Visitar
  1. 14/05/2025 - versão inicial