go:map(key-value)类型

955 阅读3分钟

参考网址

blog.csdn.net/chengqiumin…

点睛

map 是 key-value 数据结构,又称为字段数组或者关联数组。

map对象如何声明

<1>基本语法

var 变量名称 map[keytype]valuetype 

<2>key的类型

golang 中的 map对象,key可以是很多种类型。
例如:bool、数字、string、指针、channel , 还可以是只包含前面几个类型的接口、结构体、数组。
通常 key 为 intstring

<3>value的类型

valuetype 的类型和 key 基本一样,也可以是很多种类型,这里不再赘述。
通常为: 数字(整数,浮点数)、stringmapstruct

<4>map 声明的举例

> var a map[string]string
>
> var a map[string]int
>
> var a map[int]string
>
> var a map[string]map[string]string

注意:
 > 声明是不会分配内存的,初始化需要 make ,分配内存后才能赋值和使用。

实战

package main
 
import (
   "fmt"
)
 
func main() {
   // map对象的声明和注意事项
   var a map[string]string
   // 在使用 map 前,需要先 make
   // make 的作用就是给 map 这个对象分配空间
   // a = make(map[string]string, 10)
   a = make(map[string]string)
   a["no1"] = "宋江"
   a["no2"] = "吴用"
   a["no1"] = "武松"
   a["no3"] = "吴用"
   fmt.Println(a)
}
//结果map[no1:武松 no2:吴用 no3:吴用]

说明

map 在使用前一定要 makemap 的 key 不能重复,如果重复了,则以最后这个 key-value 为准。
map 的 value 是可以相同的。
map 的 key-value 是无序。
make 内置函数

map对象的使用

package main
 
import (
   "fmt"
)
 
func main() {
   // 方式一
   var a map[string]string
   // 在使用 map 前,需要先 make
   // make 的作用就是给map分配数据空间。
   a = make(map[string]string, 10)
   a["no1"] = "宋江"
   a["no2"] = "吴用"
   a["no1"] = "武松"
   a["no3"] = "吴用"
   fmt.Println(a)
   
   // 方式二
   cities := make(map[string]string)
   cities["no1"] = "北京"
   cities["no2"] = "天津"
   cities["no3"] = "上海"
   fmt.Println(cities)
   
   // 方式三
   heroes := map[string]string{
      "hero1": "宋江",
      "hero2": "卢俊义",
      "hero3": "吴用",
   }
   heroes["hero4"] = "林冲"
   fmt.Println("heroes=", heroes)
}
// 结果
map[no1:武松 no3:吴用 no2:吴用]
map[no1:北京 no2:天津 no3:上海]
heroes= map[hero4:林冲 hero1:宋江 hero2:卢俊义 hero3:吴用]

实战

要存放 3 个学生信息, 每个学生有 name 和 sex 信息。
使用 map[string]map[string]string
package main
 
import "fmt"
 
func main() {
   studentMap := make(map[string]map[string]string)
   studentMap["stu01"] = make(map[string]string, 3)
   studentMap["stu01"]["name"] = "tom"
   studentMap["stu01"]["sex"] = "男"
   studentMap["stu01"]["address"] = "北京长安街"
   
   studentMap["stu02"] = make(map[string]string) // 这句话不能少,也就是说每一个map对象都需要make分配空间
   studentMap["stu02"]["name"] = "mary"
   studentMap["stu02"]["sex"] = "女"
   studentMap["stu02"]["address"] = "上海黄浦江"
   fmt.Println(studentMap)
   fmt.Println(studentMap["stu02"])
}
// 结果
> map[stu01:map[name:tom sex:男 address:北京长安街] stu02:map[name:mary sex:女 address:上海黄浦江]]
>
> map[name:mary sex:女 address:上海黄浦江]

map数据结果包含不同类型的value的方法

result := make(map[string]string)  // 这种方式,value的类型只能是string
result := make(map[string]int)     // 这种方式,value的类型只能是int

但是我们在开发项目的过程中,value的类型会有很多种,并不能确定具体是哪一种。
所以,可以这么写:
result := make(map[string]interface {})
用interface{}来定义value类型,就可以存储int/string/map/…多种类型的value。