Переменные, типы и константы
Объявляем переменные через 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дают перечисления.