2024-05-06 20:40:05 +00:00
|
|
|
---
|
2024-10-30 17:34:11 +00:00
|
|
|
date: 2020-08-28
|
2024-05-06 20:40:05 +00:00
|
|
|
id: 85fe90d9-f7d2-47fb-9471-f2557b1fa95d
|
|
|
|
title: Golang maps
|
|
|
|
---
|
|
|
|
|
|
|
|
# Basics
|
|
|
|
|
|
|
|
A map maps keys to values, ie: associative arrays. Zero value of a map
|
|
|
|
is `nil`. `make` function returns a new `map`.
|
|
|
|
|
|
|
|
``` go
|
|
|
|
package main
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
type Vertex struct {
|
|
|
|
Lat, Long float64
|
|
|
|
}
|
|
|
|
|
|
|
|
var m map[string]Vertex
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
m = make(map[string]Vertex)
|
|
|
|
m["Bell Labs"] = Vertex{
|
|
|
|
40.68433, -74.39967,
|
|
|
|
}
|
|
|
|
fmt.Println(m["Bell Labs"])
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
# Map literals
|
|
|
|
|
|
|
|
These are essentially the same as [struct
|
|
|
|
literals](20200828181259-structs), keys are required.
|
|
|
|
|
|
|
|
``` go
|
|
|
|
package main
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
type Vertex struct {
|
|
|
|
Lat, Long float64
|
|
|
|
}
|
|
|
|
|
|
|
|
var m = map[string]Vertex{
|
|
|
|
"Bell Labs": Vertex{
|
|
|
|
40.68433, -74.39967,
|
|
|
|
},
|
|
|
|
"Google": Vertex{
|
|
|
|
37.42202, -122.08408,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
fmt.Println(m)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
If top-level type is just a type name, it can be omitted from literal
|
|
|
|
elements. Saves some typing.
|
|
|
|
|
|
|
|
``` go
|
|
|
|
package main
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
type Vertex struct {
|
|
|
|
Lat, Long float64
|
|
|
|
}
|
|
|
|
|
|
|
|
var m = map[string]Vertex{
|
|
|
|
"Bell Labs": {40.68433, -74.39967},
|
|
|
|
"Google": {37.42202, -122.08408},
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
fmt.Println(m)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
# Mutating maps
|
|
|
|
|
|
|
|
Nothing shocking here either. Map elements can be
|
|
|
|
added/deleted/modified/etc.
|
|
|
|
|
|
|
|
``` go
|
|
|
|
package main
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
m := make(map[string]int)
|
|
|
|
|
|
|
|
m["Answer"] = 42
|
|
|
|
fmt.Println("The value:", m["Answer"])
|
|
|
|
|
|
|
|
m["Answer"] = 48
|
|
|
|
fmt.Println("The value:", m["Answer"])
|
|
|
|
|
|
|
|
delete(m, "Answer")
|
|
|
|
fmt.Println("The value:", m["Answer"])
|
|
|
|
|
|
|
|
v, ok := m["Answer"]
|
|
|
|
fmt.Println("The value:", v, "Present?", ok)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
# Types
|
|
|
|
|
|
|
|
A `type` can be declared as a thin wrapper around a `map`:
|
|
|
|
|
|
|
|
``` go
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
type Dictionary map[string]string
|
|
|
|
|
|
|
|
func (d Dictionary) Search(word string) string {
|
|
|
|
return d[word]
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
d := Dictionary{"key": "This is the value"}
|
|
|
|
fmt.Println(d.Search("key"))
|
|
|
|
}
|
|
|
|
```
|