map里key的value值是可以放slice的,反之slice的index也是可以存放map的。

    1. package main
    2. import(
    3. "fmt"
    4. )
    5. func sliceMap() {
    6. /**
    7. var s []map[string]int
    8. s = make([]map[string]int,5,16)
    9. */
    10. x := make([]map[string]int,5,16)
    11. for index,value := range x {
    12. fmt.Printf("index = %d,value = %v\n",index,value)
    13. }
    14. x[0] = make(map[string]int,10)
    15. x[0]["jack"] = 10
    16. }

    上面代码做了哪些事:
    第9行:声明了一个空切片类型为map的变量s
    第10行:使用make初始化切片,否则无法操作切片
    第13行:使用了简写声明的方式初始化切片
    第15行:使用for range对x进行遍历,这里要注意的是index指的是切片下标,与map的key值不同,这里要区分一下
    第16行:打印下标与下标值,因为初始化的切片长度是5个,所以每个下标的值都是一个map,打印时要使用%v格式化
    第19行:因为每个下标的值都是map,但是这些map都没有进行过初始化,所以要使用make进行初始化一次才能进行赋值
    第21行:为切片x第一个下标的map中第一个key:jack进行赋值
    打印结果:
    index = 0,val = map[jack:10]
    index = 1,val = map[]
    index = 2,val = map[]
    index = 3,val = map[]
    index = 4,val = map[]
    切片与map的关系可以看作是以下图:
    image.png
    map里放入slice

    1. package main
    2. import(
    3. "fmt"
    4. )
    5. fun mapSlice() {
    6. /**
    7. 声明方式:
    8. var s map[string][]int
    9. s = make(map[string][]int)
    10. */
    11. s := make(map[string][]int)
    12. key := "id0"
    13. val,ok := s[key]
    14. if !ok {
    15. s[key] = make([]int,0,16)
    16. val = s[key]
    17. }
    18. val = append(val,100)
    19. val = append(val,200)
    20. s[key] = val
    21. }

    上面代码作用:

    第15行:初始化一个key为string,value为空切片的map
    第17行:初始化一个string值类型变量key
    第19行:常用map值交换操作,s[key]代表的当前的key+value,key会给ok,value会给val
    第21行:取反操作,如果变量key的值存不存在于map中,那么对map下面的key的value进行切片初始化(map中所有的value都是切片类型,所以要进行初始化)
    第22行:对map中的value进行切片初始化
    第23行:将初始化的切片给val,打印结果为:val = [],由此可知,val取得到的value
    第26行:对val[0]进行追加数据操作,此时还能放入15个元素
    第27行:对val[1]进行追加数据操作,此时还能放入14个元素
    第29行:将追加好的val切片赋值给s[key]

    s[key]打印结果:s[key] = [100 200]
    s打印结果:s = map[id0:[100 200]]