← Все этапы
01 · ОСНОВЫ GOУрок 03 из 3335 мин

Типы и преобразования

Выбираем типы данных, используем вывод типов и явные преобразования.

Тип помогает выбрать допустимые операции

Тип сообщает компилятору, как трактовать значение и какие действия разрешены. Запустите пример целиком из файла 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 обозначают один тип.

Перейдите к самостоятельному упражнению в карточке практики.

Практика

Попробуйте сами

Шаг 1. Создайте main.go в package main и импортируйте fmt. Шаг 2. Объявите type RoomNumber int как новый именованный тип и type Rating = int как псевдоним. Шаг 3. Задайте зал Синий, номер RoomNumber(2), вместимость 36, рейтинг 5 и коэффициент заполнения 0.75. Шаг 4. Преобразуйте вместимость в float64, вычислите занятые места и приведите результат к int. Шаг 5. Выведите все поля и запустите go run main.go.

Проверка результата

Как понять, что получилось

Вывод содержит название Синий, номер 2, вместимость 36, рейтинг 5 и 27 занятых мест. RoomNumber — новый именованный тип; Rating — псевдоним int. Перед умножением вместимость явно преобразована к float64, результат преобразован к int. Программа компилируется и запускается.

Типы и преобразования | Go | WebSchool · Go