Examples in Go
Maps are Go’s built-in associative data type (sometimes called hashes or dicts in other languages).
package main

import "fmt"

func main() {
    // To create an empty map, use the builtin make: make(map[key-type]val-type).
    m := make(map[string]int)

    // Set key/value pairs using typical name[key] = val syntax.
    m["k1"] = 7
    m["k2"] = 13

    // Printing a map with e.g. fmt.Println will show all of its key/value pairs.
    fmt.Println("map:", m)

    // Get a value for a key with name[key].
    v1 := m["k1"]
    fmt.Println("v1: ", v1)

    // The builtin len returns the number of key/value pairs when called on a map.
    fmt.Println("len:", len(m))

    // The builtin delete removes key/value pairs from a map.
    delete(m, "k2")
    fmt.Println("map:", m)

    // The optional second return value when getting a value from a map indicates if the key was present in the map.
    // This can be used to disambiguate between missing keys and keys with zero values like 0 or "".
    // Here we didn’t need the value itself, so we ignored it with the blank identifier _.
    _, prs := m["k2"]
    fmt.Println("prs:", prs)

    // You can also declare and initialize a new map in the same line with this syntax.
    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map:", n)
}
package main

import (
  "fmt"
)

func main() {
  commits := map[string]int{
      "rsc": 3711,
      "r":   2138,
      "gri": 1908,
      "adg": 912,
  }
  fmt.Println(commits)
}
package main

import "fmt"

func main() {
    // range on map iterates over key/value pairs.
    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }

    // range can also iterate over just the keys of a map.
    for k := range kvs {
        fmt.Println("key:", k)
    }
}