小编phy*_*hye的帖子

要在参数中使用的切片与映射

在golang中,切片和贴图都是引用类型.当您只需要修改切片/贴图中的元素时,切片/贴图成员的修改将"广播"到所有切片.例如,给定m1 := make(map[int]int); m2 := m1,m1[3] = 5将导致m2[3] == 5.

但是,当您尝试将新元素添加到这两种类型时,事情开始有所不同.如下例所示,添加到地图参数中的新元素将自动显示在参数中; 但是,添加到切片中的新元素在参数中被"丢弃".

问题是,为什么这有区别?

func editMap(m map[int]int) {
    m[3] = 8
    m[4] = 9
}

func editSlice(s []int) {
    s = append(s, 5)
    s = append(s, 9)
}

func main() {
    m := make(map[int]int, 0)
    m[1] = 5
    m[2] = 3
    fmt.Printf("%v\n", m)  //map[1:5 2:3]
    editMap(m)
    fmt.Printf("%v\n", m)  //map[1:5 2:3 3:8 4:9]

    s := make([]int, 2)
    s[0] = 2
    s[1] = 5
    fmt.Printf("%v\n", s)  //[2 …
Run Code Online (Sandbox Code Playgroud)

dictionary reference go slice

2
推荐指数
1
解决办法
657
查看次数

标签 统计

dictionary ×1

go ×1

reference ×1

slice ×1