在python中用于存储kv类型数据的结构是dict字典。golang对应的数据结构就是map映射。

先以python为例

mydict = {}
info_dict = {
'country': 'china',
}
mydict['name'] = 'hello'
mydict['age'] = 16
mydict['info'] = info_dict
print(mydict)
python test.py
{'name': 'hello', 'age': 16, 'info': {'country': 'china'}}

Process finished with exit code 0

在golang中实现示例

package main

import "fmt"

func main() {
// 定义一个映射,value类型必须是string
info := map[string]string{
"os": "linux",
"network": "huawei",
"program": "golang",
}

//定义一个映射,value类型是空接口,放什么数类型都可以。
m := make(map[string]interface{}, 0)
m["name"] = "wgw"
m["country"] = "china"
m["age"] = 16
m["info"] = info
fmt.Println(m)
}
% go run main.go 
map[age:16 country:china info:map[network:huawei os:linux program:golang] name:wgw]

与python的字典相同,遍历map获得k,v的值

for k, v := range m {
fmt.Printf("key: %v, value: %v \n", k, v)
}
% go run main.go
key: age, value: 16
key: info, value: map[network:huawei os:linux program:golang]
key: name, value: wgw
key: country, value: china

与python的字典不同,golang从map里获取key对应的value,返回的是两个值

val, ok := m["address"]
fmt.Println(val, ok)
% go run main.go
# 不存在的val返回值是nil,由于值不存在返回的检索状态就是
<nil> false

删除map中的key

delete(m, "age")
fmt.Println(m)
% go run main.go
map[country:china info:map[network:huawei os:linux program:golang] name:wgw]

清空map

package main

import "fmt"

func main() {
info := map[string]string{
"os": "linux",
"network": "huawei",
"program": "golang",
}

m := make(map[string]interface{}, 0)
m["name"] = "wgw"
m["country"] = "china"
m["age"] = 16
m["info"] = info

// 将已有的map清空
m = make(map[string]interface{}, 0)
fmt.Println(m)

}
% go run main.go
map[]

总结:golang中的map使用方式与python中的dict大体相似,重点要记住的就是map["key"] 的返回值是两个。