Введение в модули

Последнее обновление: 03.12.2021

Модули представляют набор пакетов Go, которые имеют встроенное версионирование и которые можем опубликовать для использования в других проектах.

Язык Go обладает богатой функциональностью, одной этой встроенной функциониональности может быть недостаточно для постоения приложения. Однако кроме того, Go имеет большую экосистему разработчиков, которые разрабатывают и публикуют различные модули. Эти модули могут предоставлять функциональность, которая отсутствует во встроенной библиотеке пакетов Go, но которая может быть нам необходима. И Go также позволяет использовать эти модули. Рассмотрим как создавать свои модули и подключать и использовать внешние модули в своем приложении. Но, начиная с версии Go 1.16, для использования внешних модулей необходимо определить свой модуль.

Создание модуля

Для создания модуля применяется команда go mod init, которой передается имя модуля.

Сначала определим папку, где будет располагаться наш модуль. Пусть, к примеру это будет папка C:\golang\. Далее перейдем в терминале/командной строке к этой папке. Допустим, наш модуль будет называться helloapp. Для его создания выполним команду:

go mod init helloapp
go mod init и создание модулей в языке программирования Go

После выполнения этой команды в папке появится файл go.mod. По умолчанию он будет иметь следующее содержимое:

module helloapp

go 1.17

Первая строка с директивой module определяет путь модуля - "helloapp". Вторая строка определяет используемую для модуля версию go - в данном случае 1.17.

Кроме пути модуля и версии go этот файл позволяет управлять зависимостями - внешними модулями, которые подключаются в приложение.

Загрузка внешнего модуля

Теперь подключим в наш модуль helloapp внешний модуль. Для примера возьмем модуль "rsc.io/quote". Это модуль, определенный специально для целей тестирования. Он содержит набор функций, который возвращают некоторый текст.

Для его загрузки модуля "rsc.io/quote" выполним команду:

go get rsc.io/quote

При выполнении этой команды Go загрузит необходимые зависимости:

go get загрузка модулей в языке программирования Go

Все загужаемые пакеты хранятся по пути $GOPATH\pkg\mod. Обычно переменная среды GOPATH указывает на папку [Папка текущего пользователя]\go. Например, в моем случае пакеты будут загружаться по адресу C:\Users\Eugene\go\pkg\mod

И если мы заново откроем файл go.mod, то мы увидим, что его содержимое изменилось:

module helloapp

go 1.17

require (
	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
	rsc.io/quote v1.5.2 // indirect
	rsc.io/sampler v1.3.0 // indirect
)

В него добавилась директива require(), которая содержит определения подключаемых зависимостей. В данном случае это все те зависимости, которые необходимы для работы с пакетом "rsc.io/quote".

Кроме того, мы также можем заметить, что в папке проекта c:\golang появился еще один файл - go.sum с содержимым тиа следуюшего:

golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

Этот файл содержит контрольную сумму для подключаемых пакетов.

Подключение внешнего модуля

Пакеты из внешнего модуля подключаются также, как и другие пакеты с помощью директивы import. Например, определим в папке c:\golang собственно файл кода main.go

тестирование подключения к внешнему модулю в языке программирования Go

Определим в main.go следуюшее содержимое:

package main

import (
	"fmt"
	"rsc.io/quote"
)

func main() {
	message := quote.Hello()
	fmt.Printf(message)
}

В данном случае вызывается функция quote.Hello() из пакета "rsc.io/quote", которая возвращает некоторое сообщение (точнее строку "Hello World"). И в конце запустим программу на выполнение:

Подключение к внешнему модулю в языке программирования Go
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850