1. Введение в Go: установка, инструменты, структура проекта
Введение в Go: установка, инструменты, структура проекта
Go (или Golang) — компилируемый язык программирования, который хорошо подходит для создания сетевых сервисов, утилит, бэкенда и инструментов автоматизации. В этом курсе мы будем идти от базового синтаксиса к практике: научимся писать читаемый код, собирать проекты, подключать зависимости и тестировать.
В этой статье вы:
goУстановка Go
Скачивание и установка
Устанавливайте Go только из официального источника:
После установки у вас должна появиться команда go в терминале.
Проверка установки
Вы увидите версию, например go version go1.22.x .... Это значит, что Go установлен.
Переменные окружения, которые важно понимать
Go старается работать из коробки, но несколько понятий полезно знать заранее.
GOROOT — место, где установлен Go (обычно настраивается установщиком автоматически).GOPATH — рабочая директория старого подхода (до модулей). Сейчас обычно не нужна для повседневной работы, но может встречаться.GOMOD — путь к файлу go.mod текущего модуля (появляется, когда вы находитесь внутри проекта с модулями).Посмотреть настройки Go можно так:
Первый запуск: минимальная программа
Создадим папку проекта, инициализируем модуль и запустим программу.
Модуль — это единица версии и зависимостей в Go. Он описывается файлом go.mod.
main.go:Если вы увидели Hello, Go!, значит окружение готово.
Полезный следующий шаг из официальной документации:
Основные инструменты Go
Команда go как центр экосистемы
В Go большинство ежедневных задач решаются одной утилитой — go.
Наиболее важные команды:
go run — запускает программу без явной сборки бинарникаgo build — собирает бинарный файлgo test — запускает тестыgo fmt — форматирует код по стандарту Gogo mod — управляет модулями и зависимостямиgo get — добавляет или обновляет зависимости (в модульном режиме)go list — показывает информацию о пакетах и зависимостяхФорматирование: gofmt и go fmt
В Go принято, что форматирование кода едино для всех проектов.
gofmt — форматтерgo fmt — удобная команда, которая применяет gofmt к пакетамОбычно вы либо запускаете go fmt ./..., либо настраиваете редактор так, чтобы он форматировал файл при сохранении.
Зависимости и модульный режим
С появлением модулей Go перестал требовать строгой привязки проектов к GOPATH. Теперь зависимости описываются в go.mod.
Что вы увидите в проекте:
go.mod — имя модуля, версия Go, список зависимостейgo.sum — контрольные суммы, которые фиксируют точные версии зависимостейОфициальная документация по модулям:
Инструменты качества
Минимальный набор, который стоит знать:
go test — тестыgo vet — статические проверки частых ошибокТакже в Go распространён внешний агрегатор линтеров:
Важно: линтеры не заменяют тесты, но помогают поддерживать единый стиль и находить подозрительные места.
IDE и подсказки: gopls
Для автодополнения, переходов к определению и рефакторинга в Go используется языковой сервер gopls.
gopls): golang.org/x/toolsПопулярные варианты редакторов:
Структура проекта на Go
В Go нет единственного обязательного шаблона структуры каталогов, но есть сложившиеся практики, которые упрощают поддержку.
Сначала базовое правило:
.go, которые начинаются с package ...Минимальная структура
Для небольшого проекта достаточно:
go.modmain.go или папка с main-пакетомПример:
Практичная структура для прикладного проекта
Часто используют такие папки:
cmd/ — точки входа (несколько бинарников в одном репозитории)internal/ — код, который нельзя импортировать извне вашего модуляpkg/ — код, который вы осознанно делаете доступным для внешнего импорта (используйте только если действительно нужно)configs/ — конфиги и шаблоны конфиговapi/ — спецификации API (например, OpenAPI), контрактыscripts/ — скрипты сборки и обслуживания!Схема рекомендуемой структуры папок Go-проекта и назначение каждой директории
Пример дерева:
Почему internal важен
Папка internal — это механизм языка Go. Любой пакет внутри internal/ можно импортировать только из:
internal и её подпапокЭто помогает явно отделять внутреннюю реализацию от публичного API проекта.
Где хранить main-пакет
Если у вас один исполняемый файл, допустимы два варианта:
main.go в корне (для небольших учебных и простых проектов)cmd/<имя-приложения>/main.go (удобно, когда проект растёт)Для реальной практики чаще выбирают cmd/, потому что:
Как Go находит пакеты и зависимости
В модульном режиме Go использует:
go.mod как базовый префикс импортов внутри вашего проектаgo.mod и go.sumПример:
example.com/hello-gointernal/appimport "example.com/hello-go/internal/app"Справочник по пакетам и документации:
Типичный рабочий цикл
go mod init ...go fmt ./...go get ...go vet ./...go test ./...go build ./...!Базовый цикл разработки на Go от создания модуля до сборки
Итоги
Теперь у вас есть рабочее окружение Go, понимание того, как устроены модули и какие команды составляют основу разработки. В следующих материалах курса мы перейдём к синтаксису, типам, функциям и пакетам, чтобы вы могли уверенно писать и организовывать код в реальных задачах.