В этом уроке мы познакомимся с модулями в Go и узнаем, зачем они нужны. Вы научитесь работать с внешними зависимостями в Go, а также добавлять и удалять модули. Эти знания помогут более гибко настраивать окружение.
Что такое модули
В Go модулем принято называть любое приложение, которое можно опубликовать, версионировать, импортировать или скачать. С помощью модулей мы можем управлять зависимостями.
Добавим в пример с Hello, Hexlet
пакет для логгирования. В коде это будет выглядеть так:
package main
import "github.com/sirupsen/logrus" // Указываем путь до нужного пакета внутри репозитория
func main() {
logrus.Println("Hello, Hexlet!")
}
Но чтобы это код запустился, надо создать модуль.
Как создать модуль
Чтобы превратить папку с кодом в Go-модуль, можно использовать команду go mod init
:
go mod init github.com/hexlet/hello-hexlet # Сразу указываем имя модуля
go mod init github.com/hexlet/hello-hexlet 1 ↵
go: creating new go.mod: module github.com/hexlet/hello-hexlet
go: to add module requirements and sums:
go mod tidy
Команда сгенерировала go.mod файл со следующим содержимым:
module github.com/hexlet/hello-hexlet
go 1.23.0
Файл начинается с объявления имени модуля (module github.com/hexlet/hello-hexlet
). Это уникальный идентификатор, по которому модуль хранится в индексе модулей Go. Обычно в качестве имени модуля указывают его адрес в репозитории.
Далее указывается минимальная совместимая версия языка (go 1.23
) и список зависимостей. Пока список зависимостей пуст. Вывод команды создания модуля подсказывает нам, что добавить зависимости можно командой go mod tidy
:
go mod tidy
go: finding module for package github.com/sirupsen/logrus
go: found github.com/sirupsen/logrus in github.com/sirupsen/logrus v1.9.3
go: downloading github.com/stretchr/testify v1.7.0
go: downloading gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
Команда go mod tidy
проверяет импорты в коде, загружает недостающие зависимости и удаляет лишние. Файл go.mod обновился и теперь включает в себя раздел с
зависимостями:
module github.com/hexlet/hello-hexlet
go 1.23.0
require github.com/sirupsen/logrus v1.9.3
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
Также появился файл go.sum:
...
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
...
Оба файла обновляются при каждом добавлении или удалении зависимости:
- Файл go.mod включает путь до модуля и его версию
- Файл go.sum добавляет по две записи на каждую зависимость:
- Первая запись с названием модуля, его версией и хэш-суммой
- Вторая запись с хэш-суммой go.mod файла модуля
Наконец, после установки зависимостей мы можем запусть наш код:
go run .
INFO[0000] Hello, Hexlet!
Зависимость установилась, и код заработал.
Как менять версии зависимостей
Модули предоставляют инструменты для работы с разными версиями пакетов.
По умолчанию Go добавляет последнюю доступную версию пакета. Чтобы проверить, какие еще версии пакета доступны,
используем команду go list
:
go list -m --versions github.com/sirupsen/logrus
github.com/sirupsen/logrus v0.1.0 v0.1.1 v0.2.0 ...
По умолчанию команда go list
выдает адрес текущего пакета, по которому его можно импортировать. В примере выше мы использовали два флага:
-m
указывает, что нас интересует только модуль, а не его пакеты--versions
указывает все возможные для скачивания версии пакета
Чтобы изменить версию, используем команду go get
:
go get github.com/sirupsen/logrus@v1.5.0
go: downloading github.com/sirupsen/logrus v1.5.0
go: downloading github.com/konsorten/go-windows-terminal-sequences v1.0.1
go: downloading github.com/stretchr/testify v1.2.2
go: added github.com/konsorten/go-windows-terminal-sequences v1.0.1
go: downgraded github.com/sirupsen/logrus v1.9.3 => v1.5.0
Как удалять зависимости
Удалить зависимость из проекта довольно просто — достаточно удалить импорт этой зависимости из кода и запустить go mod tidy
. В обновленном файле go.mod этого
модуля больше не будет.
Выводы
- Модуль — это само приложение, в корне которого находится файл go.mod со списком зависимостей текущего модуля
- Модуль создается командой
go mod init
- Чтобы добавить зависимость в модуль или изменить ее версию, используйте команду
go get
- Чтобы удалить зависимость, достаточно убрать ссылку на нее в коде и вызвать
go mod tidy
Самостоятельная работа
-
Создайте модуль на основе проекта hexlet-go
-
Подключите библиотеку color и разукрасьте текст разными цветами
-
Запустите программу и проверьте, что текст раскрашен
Дополнительные материалы

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.