Pular para o conteúdo principal

victorstein.dev

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

  1. Capítulo 4 - Tipos Compostos A Linguagem de Programação Go
  2. Chapter 3 - Composite Types Learning Go: An Idiomatic Approach to Real-World Go Programming