问题:
尝试将切片切片作为解包参数传递给变量时函数,出现编译错误。该错误表示无法将源切片类型分配给目标可变参数类型。
说明:
根据 Go 规范,可变参数类型为 .. .T 需要一个 []T 类型的切片作为参数。但是,对于切片的切片 [][]T,则无法满足此条件。
解决方案:
要解决此问题,需要将切片的新切片必须创建所需类型 []T 并用所需值填充。然后可以使用省略号运算符 (...) 将这个新切片解压缩传递。
示例:
<code class="go">package main import ( "fmt" ) func unpack(args ...interface{}) { fmt.Println(len(args)) } func main() { sliceOfSlices := [][]int{ []int{1, 2}, []int{101, 102}, } // Create a new slice of type []interface{} sliceOfInterfaces := []interface{}{} for _, v := range sliceOfSlices { sliceOfInterfaces = append(sliceOfInterfaces, v) } unpack(sliceOfInterfaces...) // Pass unpacked values }</code>
输出:
2
在此示例中,以 sliceOfSlices 的解包元素作为参数调用 unpack() 函数。 len() 函数用于演示传递的参数数量,这表明嵌套切片的两个元素都已解包。
以上是如何将切片作为解包参数传递给 Go 中的可变参数函数?的详细内容。更多信息请关注PHP中文网其他相关文章!