Go语言里的map
类似于python里面的字典
key - value 健值存储的数据结构
map引用类型 保存底层hash桶
map
key --天生去重 可hash对像 值类型
引用类型--不保存具体值,只保存指向底层存储的指针
值类型 -- 保存具体的值
go语言中:切片(slice)、map、channel这些都是引用类型
整型、浮点型、复数、字符串、数组 都是值类型
var name map[key_type]value_type
使用make函数去声明
name :=make(map[key_type]value_type)
package mainimport ("encoding/json""fmt"
)/*
key - value 健值存储的数据结构
map引用类型 保存底层hash桶map
key --天生去重 可hash对像 值类型引用类型--不保存具体值,只保存指向底层存储的指针
值类型 -- 保存具体的值go语言中:切片(slice)、map、channel这些都是引用类型整型、浮点型、复数、字符串、数组 都是值类型var name map[key_type]value_type使用make函数去声明
name :=make(map[key_type]value_type)
*/func main() {country := make(map[string]string, 100)//赋值country["中国"] = "北京"country["美国"] = "华盛顿"country["日本"] = "东京"fmt.Println(country)fmt.Println(country["中国"])//判断某个key在不在map中value, ok := country["中国"]if ok {fmt.Println("能正常取到值,存在这个key", value, ok)} else {fmt.Println("取不到值", ok)}//可以只用一个变量去接收result := country["中国"]fmt.Println(result)//声明加赋值country2 := map[string]string{"法国": "巴黎","德国": "柏林","意大利": "罗马",}country2["西班牙"] = "马德里" //添加新的键值对fmt.Println(country2)//遍历//用一个变量接收,只会遍历keyfor k := range country2 {fmt.Println("key:", k)}//用两个变量接收,遍历key和valuefor k, v := range country2 {fmt.Println("key:", k, "value:", v)}//删除delete(country2, "法国")fmt.Println("删除法国后:", country2)//二维mapUserInfo := map[string]map[string]string{"root": {"passwd": "123456"},}fmt.Println(UserInfo)fmt.Println(UserInfo["root"]["passwd"])//空接口 -- 可以代表任何类型对象empty_map := map[string]interface{}{"root": "root123456","age": 18,}fmt.Println(empty_map["age"])fmt.Printf("%T\n", empty_map["age"]) //intfmt.Println(empty_map["age"].(int) + 2) //空接口类型进行转换 才能和其他数据类型进行运算//map和json 的转换user_str, err := json.Marshal(UserInfo)if err != nil {fmt.Println("转换出错:", err)} else {fmt.Println("转换成功")fmt.Printf("转换成功之后的数据类型:%T\n", user_str)fmt.Println(user_str, string(user_str))}//json --> mapdata_str1 := `{"a":1,"b":2}`var dataMap map[string]interr = json.Unmarshal([]byte(data_str1), &dataMap)if err != nil {fmt.Println("转换出错:", err)} else {fmt.Println("转换成功")fmt.Printf("转换成功之后的数据类型:%T\n", dataMap)fmt.Println(dataMap)}
}