Переменные и типы данных в Go: просто и эффективно
В этом уроке мы погрузимся в мир переменных и типов данных в Go. Вы узнаете, как Go делает работу с данными простой, безопасной и эффективной. Мы разберём не только базовые концепции, но и рассмотрим интересные особенности, которые делают Go уникальным языком.
Почему типизация в Go особенная?
Go — это язык со строгой статической типизацией, что означает:
- Типы проверяются на этапе компиляции
- Нет неявных преобразований типов
- Каждая переменная имеет чётко определённый тип
- Типы помогают писать более надёжный код
💡 Интересный факт: В Go нет классов и наследования, но есть мощная система типов, которая обеспечивает безопасность и производительность.
Объявление переменных
1. Классический способ (var)
var name string = "Иван"
var age int = 25
2. Краткая форма (:=)
name := "Иван" // Go сам определит тип string
age := 25 // Go сам определит тип int
3. Множественное объявление
var (
name string = "Иван"
age int = 25
)
// Или краткая форма
name, age := "Иван", 25
⚡ Важно: Оператор
:=можно использовать только внутри функций!
Основные типы данных
1. Числовые типы
Целые числа
var (
a int = 42 // Зависит от платформы (32/64 бита)
b int8 = 127 // -128 до 127
c int16 = 32767 // -32768 до 32767
d int32 = 2147483647 // -2147483648 до 2147483647
e int64 = 9223372036854775807
)
Беззнаковые целые числа
var (
a uint = 42
b uint8 = 255 // 0 до 255
c uint16 = 65535 // 0 до 65535
d uint32 = 4294967295
e uint64 = 18446744073709551615
)
Числа с плавающей точкой
var (
pi float32 = 3.14159
e float64 = 2.718281828459045
)
2. Строки и символы
var (
name string = "Иван"
char rune = 'Я' // Unicode символ
)
🚀 Совет: В Go строки неизменяемы и используют UTF-8 кодировку. Для работы с отдельными символами используйте тип
rune.
3. Логические значения
var (
isActive bool = true
isAdmin bool = false
)
Сложные типы данных
1. Массивы
// Фиксированный массив из 5 элементов
var numbers [5]int = [5]int{1, 2, 3, 4, 5}
// Массив можно инициализировать так
primes := [...]int{2, 3, 5, 7, 11, 13}
2. Срезы (динамические массивы)
// Создание среза
numbers := []int{1, 2, 3, 4, 5}
// Добавление элементов
numbers = append(numbers, 6, 7)
// Создание среза из массива
arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4] // [2, 3, 4]
3. Карты (ассоциативные массивы)
// Создание карты
ages := map[string]int{
"Иван": 25,
"Пётр": 30,
}
// Добавление элемента
ages["Анна"] = 28
// Проверка существования ключа
age, exists := ages["Иван"]
if exists {
fmt.Printf("Возраст: %d\n", age)
}
4. Структуры
type Person struct {
Name string
Age int
Address string
}
// Создание экземпляра структуры
person := Person{
Name: "Иван",
Age: 25,
Address: "Москва",
}
Константы
const (
Pi = 3.14159
Version = "1.0.0"
MaxUsers = 1000
)
💡 Интересный факт: В Go есть специальный тип
iotaдля создания последовательностей констант:
const (
Monday = iota + 1
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
Практические задания
Задание 1: Калькулятор ИМТ
Создайте программу, которая:
- Запрашивает рост и вес пользователя
- Вычисляет индекс массы тела (ИМТ)
- Выводит результат с интерпретацией (недостаточный вес, норма, избыточный вес)
Задание 2: Конвертер валют
Напишите программу, которая:
- Хранит курсы валют в константах
- Запрашивает сумму и валюту для конвертации
- Выводит результат в выбранной валюте
Задание 3: Учёт книг
Создайте программу для учета книг в библиотеке:
- Определите структуру Book с полями: название, автор, год издания, жанр
- Создайте срез книг
- Реализуйте функции для добавления и поиска книг
Что дальше?
В следующем уроке мы:
- Изучим операторы и выражения
- Познакомимся с условными операторами
- Начнём писать более сложные программы
- Узнаем о приведении типов
🎯 Цель урока: К концу этого урока вы должны уметь:
- Работать с разными типами данных в Go
- Использовать различные способы объявления переменных
- Создавать и использовать сложные типы данных
- Понимать особенности типизации в Go