go map中的slice

发布时间 2023-07-27 15:01:50作者: 若-飞

看以下代码:

func main() {
	mym := make(map[int32][]bool)
	slice, ok := mym[1]
	if !ok {
		slice = []bool{}
		mym[1] = slice
	}
	slice = append(slice, false)
	print(mym)
}

该无法无法往mym中插入数据,原因在于:

在该代码中,当将元素追加到slice中时,实际上是在更改slice变量所引用的底层数组。这并不会更改与map关联的底层数组,因为map中保存的是slice的副本,而不是slice所引用的底层数组的指针

为了在map中更改slice,您需要直接修改map中保存的slice,而不是修改slice变量所引用的底层数组。您可以通过在map中保存slice的指针来实现这一点。

以下是一个示例代码,它演示了如何在map中更改slice

 

func main() {
    mym := make(map[int32]*[]bool)
    slice, ok := mym[1]
    if !ok {
        newSlice := []bool{}
        slice = &newSlice
        mym[1] = slice
    }
    *slice = append(*slice, false)
    fmt.Println(*mym[1]) // 输出:[false]
}