Тип помогает выбрать допустимые операции
Тип сообщает компилятору, как трактовать значение и какие действия разрешены. Запустите пример целиком из файла main.go:
package main
import "fmt"
type MemberID int
type Score = int
func main() {
name := "Лев"
visits := 4
average := 4.5
isActive := true
member := MemberID(27)
points := Score(visits)
fmt.Println("имя:", name)
fmt.Println("посещений:", visits, "средняя оценка:", average)
fmt.Println("активен:", isActive)
fmt.Println("номер:", member, "баллы:", points)
}
string хранит последовательность байтов текста. int представляет целое число; размер int зависит от архитектуры, поэтому не полагайтесь на конкретную разрядность. float64 хранит число с плавающей точкой и подходит для многих обычных дробных расчётов. bool принимает ровно true или false. bool и string — встроенные типы, но они не числовые.
Статическая проверка и вывод типа
Go проверяет типы во время компиляции. Выражения visits + 1 можно вычислить как сумму целых; visits + " гостей" не компилируется, потому что число нельзя сложить со строкой. Такое ограничение помогает обнаружить ошибку до запуска.
Короткое объявление visits := 4 позволяет компилятору вывести int из целочисленного литерала. При необходимости тип пишут явно: var visits int = 4. Литерал с дробной частью по умолчанию получает подходящий контекстом тип; компилятор проверяет его в месте использования. У переменных одного типа доступны определённые для него операции.
Явные преобразования
Go не превращает число одного типа в другой автоматически. Вызов float64(visits) явно создаёт значение float64, пригодное для дробной арифметики. Преобразование float64 в int отбрасывает дробную часть к нулю: это не округление. Для данных снаружи программы дополнительно проверяйте диапазон и смысл значения — само преобразование этого не делает.
Объявление type MemberID int создаёт новый именованный тип на базе int. Такое различие полезно, когда идентификатор нельзя случайно перепутать с количеством посещений. Значения разных именованных типов требуют явного преобразования даже при одном базовом типе. Запись type Score = int с равенством создаёт псевдоним: Score и int обозначают один тип.
Перейдите к самостоятельному упражнению в карточке практики.