我觉得这可能是对SO的一个过分提出的问题,但现在又来了。我在Go中发现这个简单的任务非常繁琐。请注意,我已将GO11MODULES设置为ON,我不确定这是否会影响整个包装系统(这不是我所假设的)。

我有一个名为“用户”的程序包,其中包含已编译的协议缓冲区(来自.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中。

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

最佳答案

如果您使用的是package protos,则该软件包为protosprotos/users不存在。软件包和软件包导入是目录级别的,而不是文件级别的。完整的import语句取决于go.mod文件中的module声明,该声明定义了导入的根目录。例如,如果您的go.mod以

module github.com/me/myapp

那么您的导入将是
import "github.com/me/myapp/protos"

08-07 23:29