Как создавать модули Голанга для других? - PullRequest
2 голосов
/ 03 мая 2019

Пример сценария

У меня есть корзина AWS S3 с большим количеством объектов, к которым пара моего приложения должна получить доступ. Приложения используют доступную им информацию для формирования имени объекта S3, получения объекта и запуска преобразования данных объекта перед его использованием для дальнейшей обработки, специфичной для приложения.

Я хотел бы создать модуль, который будет содержать логику для формирования имени объекта, получить его из S3 и затем выполнить преобразование для данных объекта, чтобы я не дублировал эти функции в нескольких местах.

В этом случае я должен добавить AWS SDK в качестве зависимости в модуле? Помните, что приложениям, возможно, придется использовать AWS SDK для чего-то другого, специфичного для этого приложения, или они могут вообще не требовать этого.

В общем, каков наилучший способ решения таких проблем, то есть где добавить зависимость? А как управлять разными версиями?

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

Если ваш код должен обращаться к пакетам из AWS SDK, тогда да, у вас нет выбора, кроме как добавить его в качестве зависимости. Если это не так и логика является общей, или вы можете абстрагировать ее от AWS SDK, тогда вам не нужна зависимость (и на самом деле инструмент go, такой как go mod tidy, удалит зависимость из go.mod, если вы добавь)

1 голос
/ 03 мая 2019

В этом случае я должен добавить AWS SDK в качестве зависимости в модуле? Имейте в виду, что приложения могут использовать AWS SDK для что-то еще специфическое для этого приложения, или они могут не требовать это вообще.

Да, если какой-либо пакет из вашего модуля зависит от AWS SDK, система Go Modules собирается добавить AWS SDK в качестве зависимости для вашего модуля. Вы не должны делать ничего особенного с вашим модулем.

Попробуйте этот скрипт с Go 1.11 или выше (и убедитесь, что он работает вне GOPATH):

  1. Напишите свой модуль так:

Дерево:

moduledir/packagedir1
moduledir/packagedir2
  1. Инициализировать модуль:

Рецепт:

cd moduledir
go mod init moduledir ;# or go mod init github.com/user/moduledir
  1. Сборка пакетов модулей:

Рецепт:

go install ./packagedir1
go install ./packagedir2

Вещи модуля должны работать автоматически!

В общем, каков наилучший способ решения таких проблем, то есть где добавить зависимость? А как управлять разными версиями?

Система Modules собирается автоматически управлять зависимостями для вашего модуля и записывать их в файлы go.mod и go.sum. Если вам нужно переопределить некоторую зависимость, вы должны использовать для этого команду «go get». Например, посмотрите на этот вопрос: Как указать зависимость модуля Go в go.mod на последний коммит в репо?

Вы также можете найти много информации о модулях здесь: https://github.com/golang/go/wiki/Modules

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...