Я считаю, что есть небольшая проблема со спецификацией Go. Следующее жалуется на то, что литерал массива не адресуем:
print([4]int{2,3}[:2])
Я знаю, почему массив, возвращаемый функцией, не адресуем (например, Ошибка при адресации возвращенного фрагмента функции ), но почему массив, например [4]int{2,3}
, не адресуемый? Особенно, когда срезы и строковые литералы - например, они работают нормально:
print([]int{2,3,0,0}[:2])
print("2300"[:2])
Более того, литералы массива, кажется, адресуемы, поскольку &[4]int{42,43}
является допустимым выражением.
Я знаю, что могу используйте фрагмент
print([]int{2,3,0,0}[:2])
но что, если бы я хотел, чтобы емкость (длина массива) была константой времени компиляции.
const maxLength = 4
...
print([maxLength]int{2,3}[:2])
И да, я могу назначить временную переменную массива , но зачем мне это?