我觉得这可能是一个关于SO的过度询问的问题,但现在又再次出现。我在Go中发现这个简单的任务非常繁琐。请注意,我已将GO11MODULES设置为ON,我不确定这是否会影响整个包装系统(这不应该是我所假设的)。
我有一个名为“ users”的软件包,其中包含一个编译的协议缓冲区(来自.proto文件)。我想将其与许多其他定义一起存储在名为protos
的文件夹中。这样我的结构看起来像这样:
- main.go
- protos
- users.go
- users.proto
- analytics.go
- analytics.proto
非常简单的结构。在users.go文件中,我正在定义package protos
。在main.go中,我想import users "protos/users"
。这样做时,我得到以下信息:build command-line-arguments: cannot load protos/users: cannot find module providing package protos/users
。
我遵循了(我认为)执行相同操作的其他示例代码。请注意,文件夹结构在$GOPATH/src/myapi
之内。
为什么这比事实证明的还要复杂?
答案 0 :(得分:1)
如果您使用的是Regular expression
,则该软件包为package protos
。 protos
不存在。软件包和软件包导入是目录级别的,而不是文件级别的。完整的import语句取决于go.mod文件中的protos/users
声明,该文件定义了导入的根目录。例如,如果您的go.mod开头为
module
然后您将导入
module github.com/me/myapp
答案 1 :(得分:0)
此答案假定GO111MODULE设置为on。该问题表明您正在设置GO11MODULES。我认为这是一个错字。如果不是错字,请修复它。
在与main.go相同的目录中添加文件go.mod,内容如下:
module myapi
将main更改为导入"myapi/protos"
而不是"protos/users"