golang 入门(三) 常用数据结构map映射
原创
©著作权归作者所有:来自51CTO博客作者hellowgw的原创作品,请联系作者获取转载授权,否则将追究法律责任
在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)
}
总结:golang中的map使用方式与python中的dict大体相似,重点要记住的就是map["key"] 的返回值是两个。