суббота, 9 мая 2020 г.

Нетипизированные числовые константы без ограничений в Golang

Константы могут быть типизированными или нетипизированными.

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 со строковыми значениями.


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


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

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