HTML Diff
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>