【发布时间】:2019-02-15 03:56:30
【问题描述】:
这听起来很愚蠢,但我现在正在尝试构建我的新 golang 项目一段时间,但我遇到了以下错误
无法加载包:包 github.com/kuskmen/yamq/cmd/yamq-client:在 C:\projects\yamq\cmd 中找到包 main (main.go) 和 yamqclient (yamq-client.go) \yamq 客户端
我知道这应该很容易解决,但我来自 .NET,我仍然没有 Go 项目及其依赖解析模型的经验,因此很困难。
我的项目结构是这样的
/yamq
/cmd
/yamq-client // yamq client application binary
main.go // package main
yamq-client.go // package yamqclient
/yamq-server // yamq server application binary
main.go // package main
yamq-server.go // package yamqserver
go.mod // contains only "module github.com/kuskmen/yamq" for now
... // some library files that will probably be moved to /shared folder
到目前为止一切顺利,当我在最外层目录 ( /yamq ) 中执行 go build 时,它正在成功构建(或者至少它没有显示任何错误),但是当我尝试构建 yamq-client 或 @987654326 时@binaries 我得到了上述错误,每次我尝试用谷歌搜索它或找到有用的东西时,我都会得到一些旧文章或答案,这些文章或答案可以追溯到 2013-2016 年,其中暗示了一些关于 $GOPATH 等的内容,因为这里不应该是这种情况我正在尝试使用 go 模块。
帮助 .NET 开发人员加入 Go 社区,向他解释模块的工作原理,因为我发现 this 和 this 没用,或者至少我没有抓住重点,提前致谢!
【问题讨论】:
-
如何从 main.go 导入 yamq-client?
-
我试过 import “yamqclient” 和 import “github.com/kuskmen/yamq-client” 都给出了同样的错误:/
-
路径应该反映您的文件系统路径。将其移出
cmd- 没有理由,然后您将拥有github.com/kuskmen/yamq/yamqclient。还要将yamq-client重命名为yamqclient以保持一致性。一般来说,从其中一个教程中的单个 lib 结构开始,并在跳到两个单独的主目录之前使其工作 -
硬性规则是 - 同一目录中的任何文件必须具有一致的包名称。因此,如果构建一个可执行文件 - 该目录中的所有文件都以
package main开头。对于一个包 - pkg 目录中的所有文件都以package mypkgname开头。您看到的错误是警告您在该特定构建目录中混合了main和yamqclient包名称。 -
@EliBendersky 我遵循 Go 项目模板指南,这就是为什么我将我的应用程序二进制文件放在 cmd 文件夹中,就像其他项目(kubernetes、heroku 等)一样
标签: go dependency-management go-modules