Golang中切片之间的赋值操作解析

Golang中切片之间的赋值操作解析 大家好,

我是Go语言的新手,正在尝试理解一些概念。我有以下一段代码和函数 appendInto

链接

我认为我的代码功能相当清晰,所以我想无需解释。我的问题是,为什么在函数 appendInto 中,子切片赋值(第37行)会导致编译时错误?我参考了代码中对应的Effective Go段落,其中讨论了切片赋值。尽管对于我的目的来说,这是错误的语句,但我原本期望这是一个有效的操作,因为它应该将数组 list1 赋值给 finalList

那么,我到底遗漏了什么呢?

提前感谢。


更多关于Golang中切片之间的赋值操作解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你好,

感谢你的回答。据我理解,问题在于赋值语句左侧的可寻址性:+1:

更多关于Golang中切片之间的赋值操作解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,切片之间的赋值操作是浅拷贝,即两个切片会共享底层数组。你遇到的编译错误是因为类型不匹配。

在你的代码中,list1[]int 类型,而 finalList[][]int 类型(切片的切片)。因此,不能直接将一个 []int 赋值给 [][]int 的某个元素,因为类型不同。

如果你想将 list1 作为元素添加到 finalList 中,应该使用 append 函数。例如:

func appendInto(finalList [][]int, list1 []int) [][]int {
    finalList = append(finalList, list1)
    return finalList
}

如果你确实想通过索引赋值,需要确保 finalList 已经具有足够的长度,并且索引位置是 []int 类型。例如:

func appendInto(finalList [][]int, list1 []int) [][]int {
    if len(finalList) > 0 {
        finalList[0] = list1 // 正确:finalList[0] 是 []int 类型
    }
    return finalList
}

错误的原因在于你试图将 []int 赋值给 [][]int 类型的变量,这是不允许的。

回到顶部