среда, 7 апреля 2021 г.

Создание модуля в Golang: вызов своего кода из другого модуля

В предыдущем посте вы создали модуль greetings. В этом посте вы напишете код для вызова функции Hello в только что написанном модуле. Вы напишете код, который можно выполнить как приложение, и который вызывает код в модуле greetings.

Примечание. Этот раздел является частью учебного пособия, состоящего из нескольких частей, которое начинается с создания модуля Go.

1. Создайте каталог hello для исходного кода модуля Go. Здесь вы напишете свой код, который будет вызывать greetings.

После создания этого каталога у вас должны быть каталоги hello и greetings на одном уровне иерархии, например:

<home>/
 |-- greetings/
 |-- hello/

Например, если ваша командная строка находится в каталоге greetings, вы можете использовать следующие команды:

cd ..
mkdir hello
cd hello

2. Включите отслеживание зависимостей для кода, который вы собираетесь написать.

Чтобы включить отслеживание зависимостей для вашего кода, запустите команду go mod init, указав ей имя модуля, в котором будет находиться ваш код.

Для целей этого руководства используйте example.com/hello в качестве пути к модулю.

$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello

3. В текстовом редакторе в каталоге hello создайте файл для записи кода и назовите его hello.go.

4. Напишите код для вызова функции Hello, а затем распечатайте возвращаемое значение функции.

Для этого вставьте следующий код в hello.go.

package main

import (
    "fmt"

    "example.com/greetings"
)

func main() {
    // Получаем приветственное сообщение и распечатываем его.
    message := greetings.Hello("Gladys")
    fmt.Println(message)
}

В этом коде вы:

  • Объявляете main пакет. В Go код, выполняемый как приложение, должен находиться в main пакете.
  • Импортируете два пакета: example.com/greetings и пакет fmt. Это дает вашему коду доступ к функциям в этих пакетах. Импорт example.com/greetings (пакет, содержащийся в модуле, который вы создали ранее) дает вам доступ к функции Hello. Вы также импортируете fmt с функциями для обработки ввода и вывода текста (например, вывода текста на консоль).
  • Получаете приветствие, вызвав функцию Hello пакета greetings.

5. Отредактируйте модуль example.com/hello, чтобы использовать локальный модуль example.com/greetings.

Для производственного использования вы опубликуете модуль example.com/greetings из его репозитория (с путем к модулю, который отражает его опубликованное местоположение), где инструменты Go могут найти его для загрузки. На данный момент, поскольку вы еще не опубликовали модуль, вам необходимо адаптировать модуль example.com/hello, чтобы он мог найти код example.com/greetings в вашей локальной файловой системе.

Для этого используйте команду go mod edit, чтобы отредактировать модуль example.com/hello, чтобы перенаправить инструменты Go с его пути к модулю (где модуля нет) в локальный каталог (где он находится).

В командной строке в каталоге hello выполните следующую команду:

$ go mod edit -replace=example.com/greetings=../greetings

Команда указывает, что example.com/greetings следует заменить на ../greetings с целью определения зависимости. После запуска команды файл go.mod в каталоге hello должен содержать директиву replace:

module example.com/hello

go 1.16

replace example.com/greetings => ../greetings

Из командной строки в каталоге hello запустите команду go mod tidy, чтобы синхронизировать зависимости модуля example.com/hello, добавив те, которые требуются кодом, но еще не отслеживаются в модуле.

$ go mod tidy
go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000

После завершения команды файл go.mod модуля example.com/hello должен выглядеть следующим образом:

module example.com/hello

go 1.16

replace example.com/greetings => ../greetings

require example.com/greetings v0.0.0-00010101000000-000000000000

Команда нашла локальный код в каталоге greetings, а затем добавила директиву require, чтобы указать, что example.com/hello требует example.com/greetings. Вы создали эту зависимость, когда импортировали пакет greetings в hello.go.

Номер, следующий за путем к модулю, является номером псевдоверсии - сгенерированным числом, используемым вместо семантического номера версии (которого у модуля еще нет).

Для ссылки на опубликованный модуль в файле go.mod обычно опускается директива replace и используется директива require с помеченным номером версии в конце.

require example.com/greetings v1.1.0

6. В командной строке в каталоге hello запустите свой код, чтобы убедиться, что он работает.

$ go run .
Hi, Gladys. Welcome!

Вы написали два функционирующих модуля.

В следующем посте вы добавите обработку ошибок.


Читайте также:


Комментариев нет:

Отправить комментарий