Map 是一种无序的键值对的集合。Map 最重要的一点是经过 key 来快速检索数据,key 相似于索引,指向数据的值。数组
Map 是一种集合,因此咱们能够像迭代数组和切片那样迭代它。不过,Map 是无序的,咱们没法决定它的返回顺序,这是由于 Map 是使用 hash 表来实现的。spa
键必须是支持相等运算符 ("=="、"!=") 类型, 如 number、string、 pointer、array、struct,以及对应的 interface。code
值能够是任意类型,没有限制。blog
第一种,声明一个Map:索引
var m map[int]string
Map定义并初始化string
var m1 map[int]string = map[int]string{0: "Linux", 1: "Python"} var m2 = map[int]string{0: "Java", 1: "Golang"}
第二种,经过make来建立Maphash
var m1 map[int]string = make(map[int]string, 10) var m2 = make(map[int]string, 10)
第三种,经过 :=
语法来定义Map编译
m1 := map[int]string{} m2 := make(map[int]string, 10)
package main import "fmt" func main() { m := map[string]string{"key0": "Linux", "key1": "Python"} fmt.Printf("插入前:map m : %v\n", m) m["key2"] = "oldboy" fmt.Printf("插入后:map m : %v\n", m) }
package main import "fmt" func main() { m := map[string]string{"key0": "Linux", "key1": "Python"} fmt.Printf("更新前:map m : %v\n", m) m["key1"] = "Golang" fmt.Printf("更新后:map m : %v\n", m) }
package main import "fmt" func main() { m := map[string]string{"key0": "Linux", "key1": "Python"} val, ok := m["key0"] if ok { fmt.Printf("查找操做:key0 => %v\n", val) } }
package main
import "fmt"
func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
fmt.Printf("删除前:map m : %v\n", m)
delete(m, "key1")
fmt.Printf("删除后:map m : %v\n", m)
}
删除操做,若是 key 不存在,不会出错。class
package main import "fmt" func main() { m := map[string]string{"key0": "Linux", "key1": "Python"} fmt.Printf("删除前:map m : %v\n", m) delete(m, "key10") fmt.Printf("删除后:map m : %v\n", m) }
package main import "fmt" func main() { m := map[string]string{"key0": "Linux", "key1": "Python"} len := len(m) fmt.Printf("map m 长度: %v\n", len) }
注意:不能够在map上使用cap()方法。import
package main import "fmt" func main() { m := map[string]string{"key0": "Linux", "key1": "Python"} cap := cap(m) fmt.Printf("map's cap is %v\n", cap) }
编译错误:
./main.go:7:12: invalid argument m (type map[string]string) for cap