问:在golang中是否有一种方法可以定义一个接受任意长度数组作为参数的函数?
例如,
function demoArrayMagic(arr [magic]int){
....
}
我了解到在golang中,数组长度是变量类型的一部分,因此以下函数不会接受任意数组作为输入。
function demoArray(arr [2]int){
....
}
如果使用arrInput [6]int
作为输入,这个函数将无法编译--即demoArray(arrInput)
将无法编译。
另外,下面的函数接受一个slice参数,不接受数组作为参数(预计是不同类型):
function demoSlice(arr []int){
....
}
即,demoSlice(arrInput)
不能编译,期望的是一个切片而不是一个数组。
问题是,有没有一种方法定义一个函数,可以接受任意长度的数组(数组,而不是切片)?对于一门语言来说,强制实施这种限制似乎相当奇怪和局限。
无论动机如何,这个问题都是有意义的,但在我的情况下,背后的原因是这样的。我有一组函数,它们以类型为[][]int
的数据结构作为参数。我注意到它们的GOB序列化比我拥有的其他数据结构慢10倍(MB/s)。我想这可能与切片中取消引用操作的链有关。从切片移动到数组——即定义类型为[10000][128]int
的对象——可能会改善情况(我希望如此)。
问候
附:我现在提醒一下,Go将事物“按值”传递/使用,使用数组可能过度复杂,因为golang将复制它们很多次。我认为我会继续使用切片,并尝试更好地理解GOB内部。