【发布时间】:2018-10-26 11:21:37
【问题描述】:
问:有没有办法在 golang 中定义一个接受任意长度数组作为参数的函数?
例如,
function demoArrayMagic(arr [magic]int){
....
}
我知道在golang中,数组长度是变量类型的一部分,因此下面的函数不会接受一个任意数组作为输入
function demoArray(arr [2]int){
....
}
此函数不会以arrInput [6]int 作为输入进行编译——即demoArray(arrInput) 将无法编译。
以下接受切片参数的函数也不接受数组作为参数(不同的类型,正如预期的那样):
function demoSlice(arr []int){
....
}
即,demoSlice(arrInput) 无法编译,需要切片而不是数组。
问题是,有没有办法定义一个接受任意长度数组(数组,而不是切片)的函数?一种语言强加这种约束看起来很奇怪和限制。
这个问题的意义与动机无关,但就我而言,背后的原因如下。我有一组函数,它们将[][]int 类型的数据结构作为参数。
我注意到它们的 GOB 序列化比我拥有的其他数据结构慢 10 倍 (MB/s)。我想这可能与切片中的解除引用操作链有关。从切片移动到数组——即定义[10000][128]int 类型的对象——可能会改善情况(我希望如此)。
问候
P.s:我现在提醒一下,Go,通过/使用“按价值”的东西,使用数组可能是矫枉过正,因为 golang 会复制它们很多次。我想我会继续使用切片,我会尝试稍微了解 GOB 的内部结构。
【问题讨论】:
标签: arrays go arguments slice gob