Объявление констант связывает список идентификаторов (имен констант) со значениями списка константных выражений. Количество идентификаторов должно быть равно количеству выражений, а n-й идентификатор слева связан со значением n-го выражения справа.
ConstDecl = "const" ( ConstSpec | "(" { ConstSpec ";" } ")" ) .
ConstSpec = IdentifierList [ [ Type ] "=" ExpressionList ] .
IdentifierList = identifier { "," identifier } .
ExpressionList = Expression { "," Expression } .
Если тип присутствует, все константы принимают указанный тип, и выражения должны быть присваиваемыми (assignable) этому типу. Если тип опущен, константы принимают отдельные типы соответствующих выражений. Если значения выражения являются не типизированными константами, объявленные константы остаются не типизированными, а идентификаторы констант обозначают значения констант. Например, если выражение является литералом с плавающей точкой, идентификатор константы обозначает константу с плавающей точкой, даже если дробная часть литерала равна нулю.
const Pi float64 = 3.14159265358979323846
const zero = 0.0 // не типизированная константа с плавающей точкой (float-pointing)
const (
size int64 = 1024
eof = -1 // не типизированная цельно-числовая (integer) константа
)
// a = 3, b = 4, c = "foo", не типизированные цельно-числовые и строковые константы
const a, b, c = 3, 4, "foo"
const u, v float32 = 0, 3 // u = 0.0, v = 3.0
В заключенном в скобки списке объявлений const список выражений может быть опущен из любого, кроме первого ConstSpec. Такой пустой список эквивалентен текстовой подстановке первого предшествующего непустого списка выражений и его типу, если таковой имеется. Поэтому пропуск списка выражений эквивалентен повторению предыдущего списка. Количество идентификаторов должно быть равно количеству выражений в предыдущем списке. Вместе с генератором iota-констант этот механизм позволяет легко декларировать последовательные значения:
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Partyday
numberOfDays // эта константа не экспортируема
)
Читайте также:
- Спецификация Go: константы
- Основы Go: константы
- Спецификация Go: свойства типов и значений - способность присвоения (assignability), представимость (representability)
Комментариев нет:
Отправить комментарий