Переменные, типы, выражения и ветвление

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

Содержание курса

const, базовые типы int/float64/bool/string и их нулевые значения

const объявляет именованную константу — значение, которое фиксируется на этапе компиляции и не может измениться в процессе выполнения программы.

const Pi = 3.14
const MaxItems int = 100

Эти две формы принципиально различаются. MaxItemsтипизированная константа: у неё зафиксирован тип int, и в любом контексте она ведёт себя именно как int. Piнетипизированная числовая константа: у неё нет конкретного типа при объявлении. Компилятор хранит её как константу вида «floating-point constant» с высокой точностью, а конкретный тип (float64, float32 или другой) она получит только тогда, когда используется в выражении, которое требует определённого типа. Если контекст не задан — применяется тип по умолчанию для данного вида константы (float64 для вещественных).

Попытка переприсвоить константу после объявления немедленно даёт ошибку компиляции: cannot assign to Pi. const допустим и внутри функции, и на уровне пакета.

Теперь о четырёх базовых типах, с которыми вы будете работать прямо сейчас:

  • int — целое число. Нулевое значение: 0.
  • float64 — число с плавающей точкой двойной точности. Нулевое значение: 0.
  • bool — логический тип. Нулевое значение: false.
  • string — строка. Нулевое значение: пустая строка "".

Каждый раз, когда вы пишете var без инициализатора, Go присваивает именно это значение. Посмотрите сами:

package main

import "fmt"

func main() {
    var i int
    var f float64
    var b bool
    var s string

    fmt.Println(i, f, b, s)
}

Вывод:

0 0 false 

Последний элемент — пустая строка, поэтому после false видно только пробел и конец строки. Нулевые значения — не случайный выбор: они семантически нейтральны для каждого типа и предсказуемы. В Go никогда не бывает ситуации, когда переменная «содержит мусор».