看以下代码:
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]
}
标签:map,slice,ok,mym,go,bool,false From: https://www.cnblogs.com/zhanchenjin/p/17584957.html