go map中的slice
看以下代码:
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]
}
更简单的代码,不需要任何中间参数:
func main() {
mym := make(map[int32][]bool)
mym[1] = append(mym[1], false)
mym[2] = append(mym[2], true)
print(mym)
}
slice类型不是特殊类型,不需要特殊操作,如果是指针,就需要new了

浙公网安备 33010602011771号