无法将本地包调用为主

时间:2019-04-25 22:48:52

标签: go

我觉得这可能是一个关于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之内。

为什么这比事实证明的还要复杂?

2 个答案:

答案 0 :(得分:1)

如果您使用的是Regular expression,则该软件包为package protosprotos不存在。软件包和软件包导入是目录级别的,而不是文件级别的。完整的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"