#4.2 golang Константы
Primary tabs
Forums:
Работа с константами в целом похожа на тот же процесс с переменными, но имеются и отличия.
В Go определяется при помощи ключевого слова const:
const pi = 3.141
или с явным укзанием типа:
const pi float64 = 3.141
При этом, по крайней мере на момент написания данных строк, неиспользуемые константы в коде оставлять можно (в отличии от переменных)
Константы тоже можно объявлять в блокe const:
const ( hello = "Привет" someConst = 2.7 )
iota - автоинкремент констант
В Го есть iota — полезный автоинкремент для константы.
Довольно часто бывают случаи, когда надо объявить несколько констант, которые отличаются между собой на единицу.
Например, значения битов в какой-то битовой маске. Именно тут поможет автоинкремент:
const ( zero = iota _ // пустая переменная, пропуск iota three // = 2 )
Вы указываете iota на первом месте, а дальше нужно просто перечислить наименования констант, каждую с новой строки.
В данном случае константа three объявлена через iota. Если нужно пропустить какое-то значение, то используется символ подчеркивания.
В Go это означает пустую безымянную переменную, так называемую placeholder, которая говорит, что здесь должна быть переменная, но мы ее проигнорируем.
При этом iota может выступать не только простым автоинкрементом, но и участвовать в математических выражениях.
Например, в данном случае константа мегабайт определяется тоже через iota:
const ( _ = iota // пропускаем первое значне KB uint64 = 1 << (10 * iota) // 1024 MB // 1048576 )
Нетепизированость констант без типа
Еще одна особенность Go — в том, что константа, у которой не указан тип, так и остается нетипизированной. Поэтому может в нужное место подставиться уже с нужным типом.
const (
// нетипизированная константа
year = 2017
// типизированная константа
yearTyped int = 2017
)
func main() {
var month int32 = 13
fmt.Println(month + year)
// month + yearTyped (mismatched types int32 and int)
// fmt.Println( month + yearTyped )
}
Выход за ограничения типа
За счет того, что константы могут быть нетипизированными, они могут хранить целочисленные значения, заметно превышающие 64 бита.
const c = 1 << 100 // очень большое число 2 в степени 100 const b = 1 << 100 // тем не менее можем применить в выражении // (главное, чтобы умещался результат): var a int = c - b + 1 fmt.Println(a)
Видео-материалы
- golang Константы и работа с ними - Курс для начинающих: ВкВидео | Ютуб | Телеграм
- Log in to post comments
- 63 reads
vedro-compota
Thu, 02/19/2026 - 21:08
Permalink
three // = 3 - исправить
three // = 3 - исправить
_____________
матфак вгу и остальная классика =)