我觉得这可能是对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
,则该软件包为protos
。 protos/users
不存在。软件包和软件包导入是目录级别的,而不是文件级别的。完整的import语句取决于go.mod文件中的module
声明,该声明定义了导入的根目录。例如,如果您的go.mod以
module github.com/me/myapp
那么您的导入将是
import "github.com/me/myapp/protos"