问:在golang中,有没有一种方法可以定义一个函数,该函数接受任意长度的数组作为参数?

例如。,

我知道在golang中,数组长度是变量类型的一部分,因此以下函数不会接受一个任意数组作为输入

该函数不会使用arrInput [6]int作为输入进行编译-即demoArray(arrInput)将无法编译。

同样,以下接受切片参数的函数不接受数组作为参数(不同类型,如预期的那样):

demoSlice(arrInput)无法编译,期望切片不是数组。

问题是,是否有一种方法可以定义一个接受任意长度数组的函数(数组,不是切片)?对于一种语言施加此约束似乎很奇怪,并且有一定的限制。

这个问题与动机无关,但在我看来,背后的原因如下。我有一组函数,将[][]int类型的数据结构作为参数。
我注意到它们的GOB序列化(MB / s)比我拥有的其他数据结构慢10倍。我想这可能与片中的取消引用操作链有关。从切片到数组-即定义[10000][128]int类型的对象-可能会改善情况(我希望)。

问候

附言:我现在提醒Go,"按值"传递/使用事物,使用数组可能会过高,因为golang将复制它们很多次。我想我会继续学习,并会尝试了解一下GOB的内部原理。

那没有。 Go不支持泛型。

唯一的方法是使用interface{},但这将允许传递任何类型的值,而不仅仅是传递所需类型的数组。

Go中的数组是"次要的"。 解决方案是根据需要使用切片。

这里要注意的一件事是,您可以继续使用数组,并且仅在要将它们传递给此函数时才对其进行切片,例如:

上面的输出(在Go Playground上尝试):