我正在做一个项目,我使用这种架构将几个 go lambda 存储在同一个存储库中:
GOPATH/
src/
github.com/my-user/my-project
lambda1/
lambda2/
lambda3/
library/
my-project 不是一个 go 项目并包含其他信息(conf 文件,...),每个存储库都是一个“独立”的 go 项目,具有自己的主包和 main.go我想要的是创建一个通用库(文件夹库)来向所有 lambda 共享一些结构或通用方法。
但无论如何我都没有找到将库导入我的 lambda 目录(无需创建新的 git 存储库/项目)
我尝试了不同的进口,比如
import "github.com/my-user/my-project/library"
import "my-project/library"
但没有任何效果我的图书馆项目遵循这个架构:
library
one-model-package/
another-model-package/
go.mod
没有 main.go 或 main 包库 repo 的 go.mod 是:
module library
go 1.14
我在库声明或导入中犯了一些错误吗?还是我必须使用外部存储库?
最佳答案
首先,在使用模块时,您的代码可能不应该存储在 $GOPATH/src
中。因为这本身可能会导致问题:
As of Go 1.11, the go command enables the use of modules when the current directory or any parent directory has a go.mod, provided the directory is outside
$GOPATH/src
. (Inside$GOPATH/src
, for compatibility, the go command still runs in the oldGOPATH
mode, even if ago.mod
is found.
要在单个存储库中拥有多个模块,我相信您仍然需要顶级
go.mod
文件初始化为 go mod init github.com/my-user/my-project
然后 library
有自己的模块文件的目录需要用 go mod init ./library
初始化.然后import "github.com/my-user/my-project/library"
应该管用。见 this作为引用。 go mod replace
可能还有一些问题和相互依赖的子模块(例如,如果您的 lambda1
取决于 library
)。查看更多关于模块及其命名如何工作的信息here .
关于go - 对同一存储库中的多个包使用公共(public)库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62928248/