Основы программирования на Go для начинающих

Этот курс предназначен для быстрого старта в изучении языка Go. Вы освоите базовый синтаксис, научитесь работать с типами данных и напишете свои первые консольные приложения.

1. Введение в Go: установка окружения, структура программы и Hello World

Введение в Go: установка окружения, структура программы и Hello World

Go (или Golang) — это компилируемый многопоточный язык программирования, разработанный внутри компании Google. Его создатели — Роб Пайк, Кен Томпсон и Роберт Гризмер — стремились создать инструмент, который сочетал бы производительность C++ с простотой чтения кода и скоростью разработки, присущей динамическим языкам вроде Python.

Go отличается строгой статической типизацией, встроенной поддержкой конкурентности и автоматическим управлением памятью (сборщик мусора). Эти качества делают его стандартом де-факто в разработке облачных сервисов, микросервисов и высоконагруженных систем.

Установка и настройка окружения

Для начала работы необходимо установить компилятор и инструменты Go. Процесс установки максимально упрощен для всех популярных операционных систем.

Шаг 1: Загрузка дистрибутива

Перейдите на официальный сайт go.dev и скачайте установочный файл для вашей операционной системы (Windows, macOS или Linux). Рекомендуется всегда использовать последнюю стабильную версию.

Шаг 2: Установка

Следуйте инструкциям установщика:

* Windows: Запустите .msi файл и следуйте подсказкам мастера установки. По умолчанию Go устанавливается в C:\Program Files\Go. * macOS: Откройте .pkg файл и следуйте инструкциям. Go будет установлен в /usr/local/go. * Linux: Распакуйте архив в /usr/local и добавьте путь /usr/local/go/bin в переменную окружения PATH.

Шаг 3: Проверка установки

После завершения установки откройте терминал (или командную строку) и введите команду:

Если установка прошла успешно, вы увидите сообщение с версией установленного Go, например: go version go1.21.0 darwin/arm64.

Выбор редактора кода

Go не требует сложной IDE, но использование редактора с поддержкой языковых инструментов значительно ускоряет обучение. Два наиболее популярных варианта:

  • Visual Studio Code (VS Code): Бесплатный и легкий редактор. Для полноценной работы необходимо установить официальное расширение Go от команды Go Team at Google. Оно обеспечивает подсветку синтаксиса, автодополнение и автоматическое форматирование.
  • GoLand: Полнофункциональная IDE от JetBrains. Платная, но предоставляет мощные инструменты для рефакторинга и отладки «из коробки».
  • Для начала обучения VS Code является оптимальным выбором.

    Первая программа: Hello World

    Традиционно изучение языка начинается с написания программы, выводящей текст на экран. В Go исходный код хранится в файлах с расширением .go.

    Создайте папку для вашего проекта, а внутри нее файл с именем main.go. Откройте этот файл в редакторе и напишите следующий код:

    !Разбор анатомии простой программы на Go: объявление пакета, импорт библиотек и главная функция

    Разбор структуры программы

    Каждая строка в этом коде имеет важное значение.

    #### 1. Объявление пакета

    Первая строка любого Go-файла должна объявлять имя пакета. Пакет — это способ группировки функций и переменных. Пакет с именем main является особенным: он сообщает компилятору, что этот код должен быть скомпилирован в исполняемую программу, а не в библиотеку.

    #### 2. Импорт зависимостей

    Ключевое слово import подключает внешние пакеты. В данном случае мы подключаем пакет fmt (сокращение от format) из стандартной библиотеки Go. Этот пакет содержит функции для форматирования ввода и вывода текста, включая вывод на консоль.

    #### 3. Главная функция

    Ключевое слово func используется для объявления функций. Функция main — это точка входа в программу. Когда вы запускаете приложение, выполнение кода начинается именно с этой функции. Фигурные скобки { и } ограничивают тело функции.

    #### 4. Вызов функции из пакета

    Здесь мы обращаемся к пакету fmt и вызываем его функцию Println (Print Line), которая выводит текст в консоль и добавляет перевод строки в конце. Обратите внимание, что в Go публичные функции (доступные из других пакетов) всегда начинаются с Заглавной буквы.

    Запуск и компиляция

    Существует два основных способа выполнить код на Go.

    Команда go run

    Для быстрой проверки кода во время разработки используется команда go run. Она компилирует программу во временную папку, запускает её и сразу удаляет исполняемый файл после завершения.

    В терминале, находясь в папке с файлом main.go, выполните:

    Вывод:

    Команда go build

    Для создания полноценного исполняемого файла (бинарника), который можно запустить на другом компьютере даже без установленного Go, используется команда go build.

    Эта команда создаст файл main (или main.exe в Windows) в текущей директории. Запустить его можно напрямую:

    Форматирование кода

    Одной из уникальных особенностей экосистемы Go является стандарт форматирования кода. Вам не нужно спорить о том, где ставить скобки или использовать ли пробелы вместо табуляции. В Go есть единственно правильный стиль.

    Утилита gofmt автоматически форматирует код согласно стандартам языка. Большинство редакторов (включая VS Code) запускают этот инструмент автоматически при сохранении файла.

    Пример «некрасивого» кода:

    После обработки gofmt он превратится в:

    Это обеспечивает единообразие кодовой базы во всех проектах на Go, независимо от того, кто их писал.

    Итоги

    * Go — компилируемый язык со строгой типизацией, созданный для эффективной разработки надежного ПО. * Для создания исполняемой программы файл должен начинаться с package main и содержать функцию func main(). * Команда go run используется для быстрого запуска, а go build — для создания бинарного файла. * Публичные функции в пакетах всегда начинаются с большой буквы (например, fmt.Println). * Стандарт форматирования gofmt обязателен и гарантирует читаемость кода.

    2. Переменные, константы и базовые типы данных в Go

    Переменные, константы и базовые типы данных в Go

    Любая компьютерная программа, по сути, занимается обработкой данных. Чтобы работать с данными, их нужно где-то хранить и как-то называть. В Go, как и в большинстве языков программирования, для этого используются переменные. Однако, будучи языком со строгой статической типизацией, Go накладывает определенные правила на то, как эти переменные создаются и используются.

    Переменные

    Переменная — это именованная область памяти, которая хранит значение определенного типа. В Go существует несколько способов объявления переменных, каждый из которых подходит для своих ситуаций.

    Стандартное объявление через var

    Ключевое слово var используется для объявления списка переменных. Вы указываете имя, а затем тип данных. Обратите внимание: в Go тип пишется после имени переменной, что отличает его от C++ или Java.

    Если вы сразу присваиваете значение, указывать тип необязательно. Компилятор Go достаточно умен, чтобы самостоятельно определить тип переменной на основе значения (это называется выводом типов).

    !Анатомия объявления переменной и механизм вывода типов

    Краткое объявление (Short Declaration)

    Внутри функций (и только внутри них) можно использовать сокращенный синтаксис :=. Это самый популярный способ создания локальных переменных в Go.

    Важно помнить два правила:

  • Оператор := одновременно объявляет переменную и присваивает ей значение.
  • Этот синтаксис не работает за пределами функций (на уровне пакета).
  • Множественное объявление

    Go позволяет объявлять несколько переменных одной строкой или блоком, что делает код чище.

    Базовые типы данных

    Go — язык со строгой типизацией. Это значит, что если переменная объявлена как число, вы не можете записать в нее строку. Рассмотрим основные примитивные типы.

    Целые числа (Integers)

    Для хранения целых чисел используются типы int и uint (беззнаковый, только положительные числа). Их размер зависит от архитектуры процессора (32 или 64 бита).

    Если вам нужен конкретный размер памяти, используйте явные типы: * int8, int16, int32, int64 * uint8, uint16, uint32, uint64

    Чаще всего вы будете использовать просто int, если у вас нет специфических требований к памяти или размеру числа.

    Числа с плавающей точкой (Floats)

    Для дробных чисел существуют два типа: * float32 — одинарная точность. * float64 — двойная точность (стандарт де-факто в Go).

    Булев тип (Boolean)

    Тип bool может принимать только два значения: true (истина) или false (ложь). Он часто используется в условных операторах.

    Строки (Strings)

    Строки в Go — это тип string. Они заключаются в двойные кавычки ". Важная особенность строк в Go: они неизменяемы (immutable). Вы не можете заменить один символ в строке, но можете создать новую строку.

    Нулевые значения (Zero Values)

    Одной из отличительных черт Go является то, что переменные всегда инициализируются. Если вы объявили переменную, но не присвоили ей значение, она получит «нулевое значение» по умолчанию для своего типа. В Go нет «мусора» в памяти.

    Таблица нулевых значений:

    | Тип | Нулевое значение | | :--- | :--- | | int, float | 0 | | bool | false | | string | "" (пустая строка) | | Указатели, функции | nil |

    Пример:

    Преобразование типов

    В Go отсутствует неявное приведение типов. Вы не можете просто сложить int и float64, даже если это кажется логичным. Вы должны явно преобразовать один тип к другому.

    Синтаксис преобразования: Тип(значение).

    Если попытаться сделать i = f без преобразования, компилятор выдаст ошибку.

    Константы

    Константы объявляются с помощью ключевого слова const. Их значение должно быть известно на этапе компиляции и не может быть изменено в процессе работы программы.

    Генератор констант iota

    В Go есть уникальный инструмент для создания перечислений (enums) — идентификатор iota. Он позволяет создавать последовательности связанных констант, где значения увеличиваются автоматически.

    Ключевое слово iota сбрасывается в 0 при каждом новом блоке const и увеличивается на 1 с каждой новой строкой.

    !Механизм автоматической нумерации констант с помощью iota

    Итоги

    * Переменные объявляются через var (везде) или := (только внутри функций). * Go — язык со строгой статической типизацией. Тип переменной определяется при компиляции и не меняется. * Если переменная объявлена, но не инициализирована, она принимает нулевое значение (0, false, ""), а не мусорное значение. * Неявное приведение типов запрещено. Для конвертации используйте синтаксис Тип(значение). * Константы неизменяемы, а iota помогает удобно создавать перечисления числовых значений.