На этом шаге продолжим рассматривать основы языка Go и познакомимся с объявлением констант.
Константы представляют собой выражения, значения которых известны компилятору и вычисление которых гарантированно происходит во время компиляции, а не во время выполнения. Базовым типом каждой константы является фундаментальный тип: логическое значение, строка или число. Результаты всех арифметических и логических операций, а также операций сравнения с операндами-константами также являются константами. Константы объявляются с помощью ключевого слова const. Приведем несколько примеров объявлений:
const limit = 512 // константа; совместима с любыми числовыми типами const top uint16 = 1421 // константа; тип: uint16
Обычной практикой считается не указывать тип явно, если только не требуется использовать какой-то конкретный тип, который не определяется компилятором. Типизированные числовые константы (такие как top в примере выше) могут использоваться только в выражениях с числовыми значениями того же типа (если явно не преобразовывать их тип). Нетипизированные числовые константы могут использоваться в выражениях с числовыми значениями любых встроенных типов (например, константу limit можно использовать в выражениях с целыми или вещественными числами).
Когда требуется определить несколько констант, их можно сгруппировать в одно объявление с единственным ключевым словом const. В случаях, когда требуется лишь объявить константы с отличающимися значениями, и при этом сами значения не играют никакой роли, можно воспользоваться поддержкой перечислений .
Например, приведенные ниже фрагменты объявляют одни и те же константы:
const Zero = 0 | const One = 1 | const Two = 2 | | | |
const ( | Zero = 0 | One = 1 | Two = 2 | ) | |
const ( Zero = iota // 0 One // 1 Two // 2 ) |
Генератор констант iota – это предопределенный идентификатор, представляющий последовательность нетипизированных целочисленных значений. Значение этого идентификатора сбрасывается в нуль при встрече каждого нового ключевого слова const и увеличивается для каждой последующей константы в группе. Поэтому в правом фрагменте выше все константы получат значение iota (One и Two – неявно). Объявление константы Zero следует за ключевым словом const, значение iota будет сброшено в нуль и присвоено константе Zero. Константа One также получит значение iota, но на этот раз оно будет увеличено на 1. Аналогично константа Two получит значение iota, которое к этому моменту станет равно 2.
Если в правом фрагменте убрать явное присваивание значения iota, константа Zero получит значение 0, константа One получит значение константы Zero, и константа Two получит значение константы One – все константы получат значение 0.
Аналогично, если константе Zero присвоить значение 2, все константы в этой группе получат значение 2. Eсли константе One присвоить значение 4, константа Zero получит значение 0 (так как она является первой в группе и ей явно не назначено какое-либо другое значение или значение iota), константа One получит значение 4 (указанное явно), и константа Two значение предыдущей константы, т.е. 4.
На следующем шаге рассмотрим объявление переменных в Go.