1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы познакомимся с модулями в Go и узнаем, зачем они нужны. Вы научитесь работать с внешними зависимостями в Go, а также добавлять и удалять модули. Эти знания помогут более гибко настраивать окружение.</p>
1
<p>В этом уроке мы познакомимся с модулями в Go и узнаем, зачем они нужны. Вы научитесь работать с внешними зависимостями в Go, а также добавлять и удалять модули. Эти знания помогут более гибко настраивать окружение.</p>
2
<h2>Что такое модули</h2>
2
<h2>Что такое модули</h2>
3
<p>В Go модулем принято называть любое приложение, которое можно опубликовать, версионировать, импортировать или скачать. С помощью модулей мы можем управлять зависимостями.</p>
3
<p>В Go модулем принято называть любое приложение, которое можно опубликовать, версионировать, импортировать или скачать. С помощью модулей мы можем управлять зависимостями.</p>
4
<p>Добавим в пример с Hello, Hexlet пакет для логгирования. В коде это будет выглядеть так:</p>
4
<p>Добавим в пример с Hello, Hexlet пакет для логгирования. В коде это будет выглядеть так:</p>
5
<p>Но чтобы это код запустился, надо создать модуль.</p>
5
<p>Но чтобы это код запустился, надо создать модуль.</p>
6
<h2>Как создать модуль</h2>
6
<h2>Как создать модуль</h2>
7
<p>Чтобы превратить папку с кодом в Go-модуль, можно использовать команду go mod init:</p>
7
<p>Чтобы превратить папку с кодом в Go-модуль, можно использовать команду go mod init:</p>
8
<p>Команда сгенерировала<em>go.mod</em>файл со следующим содержимым:</p>
8
<p>Команда сгенерировала<em>go.mod</em>файл со следующим содержимым:</p>
9
<p>Файл начинается с объявления имени модуля (module github.com/hexlet/hello-hexlet). Это уникальный идентификатор, по которому модуль хранится в индексе модулей Go. Обычно в качестве имени модуля указывают его адрес в репозитории.</p>
9
<p>Файл начинается с объявления имени модуля (module github.com/hexlet/hello-hexlet). Это уникальный идентификатор, по которому модуль хранится в индексе модулей Go. Обычно в качестве имени модуля указывают его адрес в репозитории.</p>
10
<p>Далее указывается минимальная совместимая версия языка (go 1.23) и список зависимостей. Пока список зависимостей пуст. Вывод команды создания модуля подсказывает нам, что добавить зависимости можно командой go mod tidy:</p>
10
<p>Далее указывается минимальная совместимая версия языка (go 1.23) и список зависимостей. Пока список зависимостей пуст. Вывод команды создания модуля подсказывает нам, что добавить зависимости можно командой go mod tidy:</p>
11
<p>Команда go mod tidy проверяет импорты в коде, загружает недостающие зависимости и удаляет лишние. Файл<em>go.mod</em>обновился и теперь включает в себя раздел с зависимостями:</p>
11
<p>Команда go mod tidy проверяет импорты в коде, загружает недостающие зависимости и удаляет лишние. Файл<em>go.mod</em>обновился и теперь включает в себя раздел с зависимостями:</p>
12
<p>Также появился файл<em>go.sum</em>:</p>
12
<p>Также появился файл<em>go.sum</em>:</p>
13
<p>Оба файла обновляются при каждом добавлении или удалении зависимости:</p>
13
<p>Оба файла обновляются при каждом добавлении или удалении зависимости:</p>
14
<ul><li>Файл<em>go.mod</em>включает путь до модуля и его версию</li>
14
<ul><li>Файл<em>go.mod</em>включает путь до модуля и его версию</li>
15
<li>Файл<em>go.sum</em>добавляет по две записи на каждую зависимость:<ul><li>Первая запись с названием модуля, его версией и хэш-суммой</li>
15
<li>Файл<em>go.sum</em>добавляет по две записи на каждую зависимость:<ul><li>Первая запись с названием модуля, его версией и хэш-суммой</li>
16
<li>Вторая запись с хэш-суммой<em>go.mod</em>файла модуля</li>
16
<li>Вторая запись с хэш-суммой<em>go.mod</em>файла модуля</li>
17
</ul></li>
17
</ul></li>
18
</ul><p>Наконец, после установки зависимостей мы можем запусть наш код:</p>
18
</ul><p>Наконец, после установки зависимостей мы можем запусть наш код:</p>
19
<p>Зависимость установилась, и код заработал.</p>
19
<p>Зависимость установилась, и код заработал.</p>
20
<h2>Как менять версии зависимостей</h2>
20
<h2>Как менять версии зависимостей</h2>
21
<p>Модули предоставляют инструменты для работы с разными версиями пакетов. По умолчанию Go добавляет последнюю доступную версию пакета. Чтобы проверить, какие еще версии пакета доступны, используем команду go list:</p>
21
<p>Модули предоставляют инструменты для работы с разными версиями пакетов. По умолчанию Go добавляет последнюю доступную версию пакета. Чтобы проверить, какие еще версии пакета доступны, используем команду go list:</p>
22
<p>По умолчанию команда go list выдает адрес текущего пакета, по которому его можно импортировать. В примере выше мы использовали два флага:</p>
22
<p>По умолчанию команда go list выдает адрес текущего пакета, по которому его можно импортировать. В примере выше мы использовали два флага:</p>
23
<ul><li>-m указывает, что нас интересует только модуль, а не его пакеты</li>
23
<ul><li>-m указывает, что нас интересует только модуль, а не его пакеты</li>
24
<li>--versions указывает все возможные для скачивания версии пакета</li>
24
<li>--versions указывает все возможные для скачивания версии пакета</li>
25
</ul><p>Чтобы изменить версию, используем команду go get:</p>
25
</ul><p>Чтобы изменить версию, используем команду go get:</p>
26
<h2>Как удалять зависимости</h2>
26
<h2>Как удалять зависимости</h2>
27
-
<p>Удалить зависимость из проекта довольно просто - достаточно удалить импорт этой зависимости из кода и запустить go mod tidy. В обновленном файле<em>go.mod</em>этого модуля больше не будет.</p>
27
+
<p>Удалить зависимость из проекта довольно просто - достаточно удалить импорт этой зависимости из кода и запустить go mod tidy. В обновленном файле<em>go.mod</em>этог�� модуля больше не будет.</p>
28
<h2>Выводы</h2>
28
<h2>Выводы</h2>
29
<ul><li>Модуль - это само приложение, в корне которого находится файл<em>go.mod</em>со списком зависимостей текущего модуля</li>
29
<ul><li>Модуль - это само приложение, в корне которого находится файл<em>go.mod</em>со списком зависимостей текущего модуля</li>
30
<li>Модуль создается командой go mod init</li>
30
<li>Модуль создается командой go mod init</li>
31
<li>Чтобы добавить зависимость в модуль или изменить ее версию, используйте команду go get</li>
31
<li>Чтобы добавить зависимость в модуль или изменить ее версию, используйте команду go get</li>
32
<li>Чтобы удалить зависимость, достаточно убрать ссылку на нее в коде и вызвать go mod tidy</li>
32
<li>Чтобы удалить зависимость, достаточно убрать ссылку на нее в коде и вызвать go mod tidy</li>
33
</ul>
33
</ul>