gpt4 book ai didi

go - 将一个主包放在 cmd/myapp 子目录中可以吗?

转载 作者:IT王子 更新时间:2023-10-29 01:04:31 25 4
gpt4 key购买 nike

这是我的第一个 Go 项目,我很难掌握有关代码组织的不同文档(例如,我发现很难分辨哪些已被取代,或应用于已弃用的 vendor 工具/方法)。我终于选择了 Ben Johnson 的 Standard Package Layout ,有一个非常纤细的根包(在我的项目的根目录中)和 internal/pkg/...中的大部分代码

但是,我已经添加了一个 cmd/myapp 目录并将可执行程序的 main.go 文件放在那里,因为我知道这是一个常见的模式。

所以现在我有:

myapp
|
+- myapp.go // "package myapp", with only type and interface declarations and no imports
|
+- cmd
| |
| +- main.go // "package main", with import gitlab.tld/username/myapp, gitlab.tld/username/myapp/internal/pkg/routing etc.
|
+- internal
|
+- pkg
|
+- routing
| |
| +- routing.go // "package routing"
|
+- sql
|
+- etc.

现在,当我转到 cmd/myapp 并调用 go build 时,它可以正常构建并留下一个可执行文件来执行它应该执行的操作。但是当我从项目的主目录调用 go build -v 时,没有生成可执行文件。事实上,似乎只有 myapp.go 被处理,其中只包含类型定义。 (当然,go install 也不会生成二进制文件。go get -v gitlab.tld/username/myapp 似乎也没有执行任何操作。)

所以我怀疑这毕竟不是它的意思,但我什至不太确定。是项目布局有问题,还是我对go tooling的使用有误?

感谢您为这个 go 新手提供的任何帮助,

安德烈亚斯

最佳答案

当您运行 go buildgo install 时,该命令需要一个要处理的包列表。如果没有给出导入路径,则该操作适用于当前目录中的包。

因此,如果您的根目录中没有package main,则不会生成可执行文件。

该命令不在子目录中查找。 cmd 目录中可能有多个命令。在这种情况下,它不知道要构建哪一个。每次都构建它们是一种浪费。

关于go - 将一个主包放在 cmd/myapp 子目录中可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48518820/

25 4 0