4/100 Dias de Golang - Tipos Compostos - Maps
Table of Contents
#
Maps
Maps são hash tables. Eles são uma coleção de pares chave-valor. Para quem já programou em Python os maps são muito similares aos dicionários. Como a liguagem é tipada, temos que todas as chaves devem ser do mesmo tipo e todos os valores devem ser do mesmo tipo. Para definirmos um map, onde as chaves são do tipo string
e os valores do tipo int
, fazemos da seguinte forma:
var x = map[string]int
Os elementos são acessados através da chave.
// Podemos definir um map com valores
var x = map[string]int{
"key1": 1,
"key2": 2,
"key3": 3,
}
fmt.Println(x["key1"]) // 1
#
Adicionando elementos a um map
Para adicionar elementos a um map, fazemos da seguinte forma:
var x = map[string]int{
"key1": 1,
"key2": 2,
"key3": 3,
}
x["key4"] = 4
fmt.Println(x) // map[key1:1 key2:2 key3:3 key4:4]
#
Iterar sobre um map
Podemos iterar sobre um map usando a função range
.
var x = map[string]int{
"key1": 1,
"key2": 2,
"key3": 3,
}
for key, value := range x {
fmt.Println(key, value)
}
Se você executar o código acima, você poderá ver a seguinte saída:
key2 2
key1 1
key3 3
Mas caso escute novamente, provavelmente a ordem dos elementos será diferente. Isso acontece porque os maps não mantêm a ordem dos elementos. Caso seja necessário, devemos explicitamente ordenar os elementos.
#
Verificação se uma chave existe
Para verificar se uma chave existe em um map, podemos fazer da seguinte forma:
var x = map[string]int{
"key1": 1,
"key2": 2,
"key3": 3,
}
value, ok := x["key1"]
fmt.Println(value, ok) // 1 true
value, ok = x["key4"]
fmt.Println(value, ok) // 0 false
A variável ok
é do tipo bool
e indica se a chave existe no map. E a variável value
é o valor default do tipo do map.
#
Deletando chaves de um map
Para deletar uma chave de um map, utilizamos a função delete
.
var x = map[string]int{
"key1": 1,
"key2": 2,
"key3": 3,
}
delete(x, "key1")
fmt.Println(x) // map[key2:2 key3:3]
Podemos também limpar todos os elementos de um map, utilizando a função clear
.
var x = map[string]int{
"key1": 1,
"key2": 2,
"key3": 3,
}
clear(x)
fmt.Println(x) // map[]
#
Referências
- Capítulo 4 - Tipos Compostos A Linguagem de Programação Go
- Chapter 3 - Composite Types Learning Go: An Idiomatic Approach to Real-World Go Programming