看以下代码:
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]
}