Понятно, что не компилируется.
length := 7
var array [length]int
Компилируется
const length = 7
var array [length]int
//or
length := 7
slice := make([]int, length) //we get a slice here instead of array
Во втором случае получаем slice, а не array. А я хочу именно array, что бы например контролировать allocation, снизить давление на GarbageCollector (ну или из других соображений, мало ли, не зря ведь тип array определен в языке). И хочу выделять этот array динамически.
Use case
func UseArray(length int){
var array //of length ???????
for _, value := range array{ //do something with array
fmt.Println(value)
}
}
Вот заготовка на
playground поиграться с ответами
Я пробовал с
unsafe и
reflect и вроде получил что то похожее на решение. Но код такой убогий, угловатый и зависящий от реализации unsafe в компиляторе, что даже стыдно его показывать. Вобщем православное решение с использованием
unsafe и
reflect вполне устроит.