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了 

posted @ 2023-07-27 14:52  若-飞  阅读(55)  评论(0)    收藏  举报