Maps

Maps #

// _Maps_ é o [vetor associativo](https://pt.wikipedia.org/wiki/Vetor_associativo)
// nativo de Go.
// (também chamado de _hashes_ ou _dicts_ em outras linguagens).

package main

import "fmt"

func main() {

	// Para criar um map vazio, utilize o comando nativo `make`:
	// `make(map[tipoDaChave]tipoDoValor)`.
	m := make(map[string]int)

	// É possível alterar ou criar pares de chave/valor
	// usando a sintaxe `nomeDoMap[chave] = valor`.
	m["k1"] = 7
	m["k2"] = 13

	// Ao imprimir um map com `fmt.Println`, por exemplo,
	// serão exibidos todos os pares chave/valor.
	fmt.Println("mapa:", m)

	// Para selecionar o valor de determinada chave,
	// usa-se o comando `nomeDoMap[chave]`.
	v1 := m["k1"]
	fmt.Println("valor 1: ", v1)

	// O comando nativo `len`, recebendo um mapa como
	//  argumento, retorna o número de pares chave/valor.
	fmt.Println("len:", len(m))

	// O comando nativo `delete` remove um determinado
	// par de chave/valor do mapa.
	delete(m, "k2")
	fmt.Println("mapa:", m)

	// Ao selecionar um determinado valor em um mapa,
	// existe um segundo retorno opcional, do tipo booleano,
	// que indica a presença ou ausência de um determinado
	// par no map. Isto pode ser utilizado para desambiguação
	// entre chaves ausentes e chaves com valor zero, como
	// `0` or `""`. Onde o valor correspondente à chave não
	// for necessário, é possível ignorar com um identificador
	// vazio `_`.
	_, prs := m["k2"]
	fmt.Println("presença da chave:", prs)

	// Também é possível declarar e inicializar um
	// novo mapa na mesma linha com a sintaxe a seguir.
	n := map[string]int{"foo": 1, "bar": 2}
	fmt.Println("mapa:", n)
}
# Note que os mapas são exibidos na forma `map[k:v k:v]`
# quando impressos com `fmt.Println`.
$ go run maps.go 
mapa: map[k1:7 k2:13]
valor 1:  7
len: 2
mapa: map[k1:7]
presença da chave: false
mapa: map[bar:2 foo:1]