1. Основы языка: синтаксис, базовые типы данных и управление потоком
Основы языка: синтаксис, базовые типы данных и управление потоком
Добро пожаловать в курс Go Developer: Путь до Strong Junior. Мы начинаем наше путешествие с фундамента, на котором строится любое приложение на Go. Этот язык, разработанный в Google, славится своей простотой, производительностью и строгим отношением к коду.
В этой статье мы разберем анатомию Go-программы, научимся работать с переменными и типами данных, а также освоим управление потоком выполнения. Если вы пришли из других языков (Python, Java, C++), многое покажется вам знакомым, но у Go есть свои уникальные идиомы, которые важно усвоить с самого начала.
Анатомия программы на Go
Любая исполняемая программа на Go начинается с пакета main. Это точка входа. Давайте посмотрим на классический пример Hello World и разберем его по косточкам.
Разбор структуры
package main: Первая строка любого файла .go объявляет, к какому пакету относится этот файл. Пакет main — особенный. Он сообщает компилятору, что этот код должен быть скомпилирован в исполняемый файл, а не в библиотеку.import "fmt": Команда импорта подключает внешние пакеты. fmt (форматирование) — это стандартная библиотека для ввода и вывода данных (аналог printf в C или print в Python).func main() { ... }: Функция main — это сердце программы. Именно с неё начинается выполнение кода. Обратите внимание: она не принимает аргументов и ничего не возвращает.!Структура стандартного файла исходного кода на Go
Переменные и константы
Go — язык со статической типизацией. Это значит, что тип переменной определяется на этапе компиляции и не может меняться в процессе работы программы. Это спасает от множества глупых ошибок.
Объявление переменных
Существует два основных способа создания переменных.
1. Полное объявление через var
Используется, когда мы хотим явно указать тип или когда мы объявляем переменную на уровне пакета (вне функций).
2. Короткое объявление :=
Это самый популярный способ внутри функций. Go сам понимает (выводит) тип переменной на основе значения справа.
> Важно: Оператор := можно использовать только внутри функций. На уровне пакета он вызовет ошибку компиляции.
Константы
Константы объявляются с помощью ключевого слова const. Их значение должно быть известно на этапе компиляции.
Базовые типы данных
В Go нет бесконечного зоопарка типов, но есть всё необходимое для эффективной работы.
Целые числа (Integers)
Самые используемые типы:
* int: Зависит от архитектуры процессора (32 или 64 бита). Используйте его по умолчанию для счетчиков и математики.
* int8, int16, int32, int64: Числа фиксированного размера.
* uint: Беззнаковое целое (только положительные числа).
Числа с плавающей точкой (Floats)
* float32: Одинарная точность.
* float64: Двойная точность (стандарт де-факто в Go).
Булев тип (Boolean)
Тип bool может принимать только два значения: true или false. В Go нет неявного приведения типов, как в C или JavaScript. Вы не можете написать if 1 { ... }, вы обязаны написать if 1 == 1 { ... }.
Строки (Strings)
Строки в Go — это неизменяемая последовательность байтов. Они заключаются в двойные кавычки "...".
Для многострочного текста используются обратные кавычки (backticks) ` ... . В них сохраняются все переносы строк и пробелы.
Нулевые значения (Zero Values)
Это одна из киллер-фич Go. Если вы объявили переменную, но не присвоили ей значение, она не будет содержать "мусор" из памяти. Она получит нулевое значение по умолчанию:
| Тип | Zero Value |
| :--- | :--- |
| int, float | 0 |
| bool | false |
| string | "" (пустая строка) |
| Ссылочные типы (пока не изучали) | nil |
Это гарантирует предсказуемое поведение программы.
Управление потоком
Go стремится к минимализму. Здесь нет while или do-while. Есть только один цикл, но он умеет всё.
Условный оператор if
Синтаксис похож на C, но круглые скобки вокруг условия не нужны, а фигурные скобки обязательны.
Идиома Go: if с инициализацией
Вы можете объявить переменную прямо в условии if. Эта переменная будет видна только внутри блока if-else.
Это крайне полезно для обработки ошибок, о чем мы поговорим в следующих статьях.
Цикл for
Как уже было сказано, for — единственный цикл в Go. Но у него есть три обличия.
1. Классический цикл (как в C/Java)
2. Цикл-while (только условие)
3. Бесконечный цикл
!Три формы использования цикла for в Go
Оператор switch
switch в Go удобнее, чем во многих других языках.
: В Go кейсы не "проваливаются" (fallthrough) по умолчанию. Выполнился один case — вышли из switch.Switch без условия
Это чистая альтернатива длинным цепочкам if-else.
Форматирование кода
В мире Go не спорят о том, где ставить скобки. Есть утилита go fmt, которая автоматически форматирует код по единому стандарту.
> Хороший тон Go-разработчика: всегда прогонять код через go fmt` перед коммитом. Большинство IDE делают это автоматически при сохранении файла.
Заключение
Мы рассмотрели базу: структуру программы, переменные, типы и управление потоком. Go может показаться слишком простым, но именно в этой простоте кроется его сила. Ограниченный набор инструментов заставляет писать понятный и поддерживаемый код.
В следующей статье мы углубимся в более сложные структуры данных: массивы, слайсы и мапы, которые являются "рабочими лошадками" любого Go-приложения.