воскресенье, 2 июня 2019 г.

Спецификация Go: объявление констант

Объявление констант связывает список идентификаторов (имен констант) со значениями списка константных выражений. Количество идентификаторов должно быть равно количеству выражений, а 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  // эта константа не экспортируема
)


Читайте также:


Комментариев нет:

Отправить комментарий