Константы могут быть типизированными или нетипизированными.
const a uint = 17
const b = 55
Нетипизированная константа не имеет границ. Когда она используется в контексте, требующем типа, выводится тип и применяется ограничение.
const big = 10000000000 // Ok, хотя значение слишком велико для int.
const bigger = big * 100 // Все еще в порядке.
var i int = big / 100 // Нет проблем: новый результат помещается в int.
// Compile time error: "constant 10000000000 overflows int"
var j int = big
// Ошибка времени компиляции: "константа 10000000000 переполняет int"
Предполагаемый тип определяется синтаксисом значения:
- 123 получает тип int
- 123.4 становится float64
Другие возможности - rune (псевдоним для int32) и complex128.
Перечисления
Go не имеет перечисляемых типов (enum). Вместо этого вы можете использовать специальное имя iota в одной декларации const, чтобы получить серию возрастающих значений. Когда выражение инициализации опущено для const, оно повторно использует предыдущее выражение.
const (
red = iota // red == 0
blue // blue == 1
green // green == 2
)
В посте 4 примера использования iota показано, как можно реализовать enum со строковыми значениями.
Читайте также:
Комментариев нет:
Отправить комментарий