go - 对同一存储库中的多个包使用公共(public)库

标签 go

我正在做一个项目,我使用这种架构将几个 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 old GOPATH mode, even if a go.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/

相关文章:

go - 解释方法表达式的打印值

google-app-engine - 如何在 Go 中的 App Engine 上为 OAuth2 使用客户端 ID?

amazon-web-services - 使用CodeDeploy的golang应用程序的EC2部署

sockets - Go语言如何创建客户端?

go - 如何通过字符串变量调用方法?

go - 学习围棋——范围

postgresql - golang在for循环中追加问题

高语 : panic on call of nil object's method

go - 为什么在两个 channel 上选择的时间比在单 channel 上选择的时间慢得多?

将提示与 CountDocument 一起使用时,MongoDB golang 驱动程序不会返回无法识别的字段 `hint`