Я новичок в goLang. Я пытаюсь разработать многомодульный проект. моя рабочая папка нравится
root
1-Authz
1.1-Main.go
1.2-go.mod (contains:module com.mbt.authz)
1.3-go.sum
2-Product
2.1-Main.go
2.2-go.mod (contains:module com.mbt.product)
2.3-go.sum
3-go.work
4-GoMultiModule.code-workspace
go.work folder is like
go 1.18
use(
./Authz
./Product
)
Оба модуля могут работать сами по себе. Но я хочу определить метод в Authz и вызвать его функция из Продукта. Что мне делать, как я могу добавить зависимость к модулю продукта из моей локальной рабочей области?
Для тестирования просто добавьте в Product/main.go
импорт со ссылкой на Authz
:
import com/mbt/authz/aPackage
Это предполагает, что вы определяете метод в пакете, отличном от main
, в Authz
проекте.
Это часто задаваемые вопросы для многих новых разработчиков golang.
В golang модуль и пакет — это не одно и то же. Модуль может содержать один или несколько пакетов. Модуль инициализируется командой go mod init [modulename]
. Эта команда создаст файл go.mod. Пакет можно просто определить в коде с помощью package [packagename]
. Пакет в том же модуле (назовем его локальным пакетом) можно импортировать с помощью import "[packagename] [modulename]/[pathofpackage]"
В вашем случае, если вы не хотите создавать другой модуль, вы можете удалить файлы go.mod и go.sum в папках Authz и Products. Затем в корневой папке запустите go mod init root
. Затем импортируйте пакет аутентификации в код продукта с чем-то вроде import (authz "root/authz")
(authz — это имя пакета, указанное в коде Authz)
Если authz должен быть другим модулем, он будет рассматриваться как другой модуль, который нельзя импортировать напрямую, как локальный пакет.
Чтобы импортировать локальный модуль в папку Authz, вам нужно отредактировать файл go.mod в папке продуктов следующим образом:
module somemodulename
go 1.16
require (
authzmodulename v0.0.0
)
replace authzmodulename v0.0.0 => ../Authz/