概念
Golang一种内置结构,形式<key,value>,类似Java中的HashMap或者Python中的dict(字典)。其中key是可比较的,不能为slice,因为slice没有实现比较操作。另外需要注意一点就是map是引用类型,作为参数存在副作用。
操作以及例子
如何创建
使用make,语法格式:make(map[key-type]val-type)
可以在声明的时候初始化:map[key-type]val-type{key:value, ...}
如何修改
赋值:name[key]=val
删除: delete(name, key)
如何访问
直接使用下标:name[key]
带有校验型: val, ok := name[key], ok是false表示key对应的值不存在
例子:
// 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 le returns the numbers 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 dismbiguate 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 identifer _.
**/
_, prs := m["k2"]
fmt.Println("prs:", prs)
if !prs {
fmt.Println("m[\"k2\"] is not exist.")
}
// you can also decalre and initialize a new map in the same line with this syntax
n := map[string]int{"foo": 1, "bar": 2}
fmt.Println("map:", n)
}
参考资料
https://golang.google.cn/doc/effective_go.html#maps
https://gobyexample.com/maps
有疑问加站长微信联系(非本文作者)