В: Есть ли способ, в 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 раз медленнее (МБ / с), чем у других структур данных, которые у меня есть. Я полагаю, что это может быть связано с цепочкой операций разыменования в срезах. Переход от срезов к массиву - т.е. определение объектов типа [10000][128]int
- может улучшить ситуацию (я надеюсь).
Привет
P.s: Теперь я напоминаю, что Go передает / использует вещи «по значению», использование массивов может быть излишним, потому что Голанг будет копировать их много раз. Я думаю Я останусь с кусочками и попытаюсь немного понять внутренности GOB.