Объявить постоянный массив

Я пытался:

const ascii = "abcdefghijklmnopqrstuvwxyz" const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 } const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 } const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 } 

Во-первых, декларация и инициализация работают нормально, но вторая, третья и четвертая не работают. Как я могу объявить и инициализировать массив const float?

Массив не является неизменным по своей природе; вы не можете сделать его постоянным.

Ближайшим вам может быть:

 var letter_goodness = [...]float32 {.0817, .0149, .0278, .0425, .1270, .0223, .0202, .0609, .0697, .0015, .0077, .0402, .0241, .0675, .0751, .0193, .0009, .0599, .0633, .0906, .0276, .0098, .0236, .0015, .0197, .0007 } 

Обратите внимание на [...] вместо [] : он обеспечивает получение массива (фиксированного размера) вместо среза. Значения не фиксированы, но размер.

От эффективного перехода :

Константы в Go просто такие-постоянные. Они создаются во время компиляции, даже если они определены как локальные в функциях, и могут быть только номерами, строками или булевыми. Из-за ограничения времени компиляции выражения, которые их определяют, должны быть постоянными выражениями, которые могут быть оценены компилятором. Например, 1 << 3 является константным выражением, а math.Sin (math.Pi / 4) - это не потому, что вызов функции math.Sin должен произойти во время выполнения.

Ломтики и массивы всегда оцениваются во время выполнения:

 var TestSlice = []float32 {.03, .02} var TestArray = [2]float32 {.03, .02} var TestArray2 = [...]float32 {.03, .02} 

[...] сообщает компилятору выяснить длину самого массива. Ломтики обертывают массивы и с ними легче работать в большинстве случаев. Вместо использования констант просто сделайте переменные недоступными для других пакетов, используя первую строчную букву:

 var ThisIsPublic = [2]float32 {.03, .02} var thisIsPrivate = [2]float32 {.03, .02} 

thisIsPrivate доступен только в определенном пакете. Если вам нужен доступ для чтения извне, вы можете написать простую функцию getter (см. Getters in golang ).

В Go нет такой вещи, как константа массива.

Цитирование по языковой спецификации Go: константы :

Булевские константы , константы руны , целочисленные константы , константы с плавающей запятой , сложные константы и строковые константы . Руны, целочисленные, с плавающей точкой и сложные константы называются числовыми константами .

Константное выражение (которое используется для инициализации константы) может содержать только константные операнды и оцениваться во время компиляции.

В спецификации перечислены различные типы констант. Обратите внимание, что вы можете создавать и инициализировать константы с постоянными выражениями типов, имеющих один из разрешенных типов в качестве базового типа . Например, это верно:

 func main() { type Myint int const i1 Myint = 1 const i2 = Myint(2) fmt.Printf("%T %v\n", i1, i1) fmt.Printf("%T %v\n", i2, i2) } 

Выход (попробуйте на игровой площадке Go ):

 main.Myint 1 main.Myint 2 

Если вам нужен массив, он может быть только переменной, но не константой.

Я рекомендую эту замечательную статью в блоге о константах: Константы

Как отмечали другие, для этого нет официальной конструкции Go. Самое близкое, что я могу себе представить, – это функция, которая возвращает срез. Таким образом, вы можете гарантировать, что никто не будет манипулировать элементами исходного среза (так как он «жестко закодирован» в массив).

Я сократил ваш кусочек, чтобы сделать его … короче …:

 func GetLetterGoodness() []float32 { return [...]float32 { .0817,.0149,.0278,.0425,.1270,.0223 } } 
  • Массивы указателей функций в Фортране
  • Как удалить элемент из массива в C #
  • Использование malloc для размещения многомерных массивов с разной длиной строк
  • Как фильтровать массив объектов на основе значений во внутреннем массиве с jq?
  • Добавление элементов в массив Swift для нескольких streamов, вызывающих проблемы (поскольку массивы не являются streamобезопасными) - как мне обойти это?
  • Почему метод toString в java не работает для массива
  • Общие массивы в Java
  • Создать массив Arraylists
  • Является ли массив примитивным типом или объектом (или чем-то еще полностью)?
  • В чем разница между Dim v As String () и Dim v () As String?
  • Создание расширения для фильтрации нилей из массива в Swift
  • Interesting Posts

    Как удалить папку OneDrive из дерева папок File Explorer в Windows 10?

    удаление недопустимых символов XML из строки в java

    jackson: как добавить настраиваемое свойство в JSON без изменения POJO

    Ошибка XML: существует несколько корневых элементов

    Лучший способ найти все факторы заданного числа

    SoftKeyboard открыть и закрыть прослушиватель в Android-приложении?

    pinvokestackimbalance – как я могу это исправить или отключить?

    Как я могу избежать перекрытия медиа-запросов?

    Как настроить Mail.App и Google Mail?

    Каковы подводные камни использования Websockets вместо RESTful HTTP?

    Может ли новый MacBook / MacBook Pro поддерживать двухсторонние мониторы

    Может ли один исполняемый файл быть консольным и графическим приложением?

    Разрешение записи на SD-карту Android SD с использованием SAF (Storage Access Framework)

    Подсказка Найти .cmake Файлы с пользовательским каталогом

    «Создание» объекта с возможностью копирования с возможностью memcpy

    Давайте будем гением компьютера.