Переменные, типы и константы

Объявляем переменные через var и :=, знакомимся с базовыми типами и константами с iota.

:= — короткое объявление: создаёт переменную и выводит её тип из значения. Работает только внутри функций.

Два способа объявить переменную

Полная форма с var позволяет указать тип явно. Короткая форма := выводит тип сама — это самый частый способ внутри функций.

package main

import "fmt"

func main() {
    var name string = "Go"   // полная форма с типом
    var year = 2009           // тип выведен: int
    count := 0                // короткая форма, только внутри функций
    var ratio float64         // объявлено без значения: ноль типа

    fmt.Println(name, year, count, ratio)
}

Вывод:

Go 2009 0 0

Нулевые значения

В Go нет неинициализированных переменных и нет undefined. Любая объявленная переменная сразу получает нулевое значение своего типа: 0 для чисел, "" для строк, false для булевых, nil для ссылочных типов. Это устраняет целый класс ошибок «использовал до присваивания».

Базовые типы

КатегорияТипы
Целыеint, int8/16/32/64, uint, byte
Дробныеfloat32, float64
Логическийbool
Строкиstring (неизменяемые, UTF-8)

Go строг к типам: смешивать int и float64 в арифметике нельзя без явного преобразования. Это раздражает поначалу, но убирает неявные сюрпризы.

package main

import "fmt"

func main() {
    var i int = 7
    var f float64 = 2.0
    // result := i / f      // ОШИБКА: разные типы
    result := float64(i) / f  // явное преобразование
    fmt.Println(result)
}

Вывод:

3.5

Константы и iota

Константы объявляются через const и вычисляются на этапе компиляции. Для перечислений в Go есть iota — счётчик, который автоматически нумерует константы внутри блока, начиная с нуля.

package main

import "fmt"

const Pi = 3.14159

type Weekday int

const (
    Sunday Weekday = iota // 0
    Monday                // 1
    Tuesday               // 2
    Wednesday             // 3
)

func main() {
    fmt.Println(Pi)
    fmt.Println(Sunday, Monday, Wednesday)
}

Вывод:

3.14159
0 1 3

Каждая строка в блоке const увеличивает iota на единицу. Так одним блоком создаётся аккуратное перечисление без ручной нумерации.

Итог

  • var — с явным типом, := — с выводом типа внутри функций.
  • Каждая переменная имеет нулевое значение; undefined в Go нет.
  • Преобразование типов всегда явное; const + iota дают перечисления.
Проверьте себя
1. Где можно использовать короткое объявление :=?
AВ любом месте программы
BТолько внутри функций
CТолько на уровне пакета
DТолько для констант
2. Чему равна целочисленная переменная сразу после var x int без присваивания?
Anil
Bundefined
C0
Dслучайному значению
3. Что делает iota в блоке const?
AЗадаёт случайное число
BАвтоматически нумерует константы, начиная с 0
CИмпортирует пакет
DПреобразует типы
Поддержать проект