go - 使用 /cmd 结构构建 Go 模块时出错
问题描述
我是新来的模块,并且正在将它们用于一个新项目中,我试图在此处描述的结构之后对其进行建模
这是我的目录结构的示例:
.
├── cmd
│ └── app_name
│ └── main.go
├── go.mod
├── go.sum
├── internal
│ └── bot
│ └── bot.go
└── pkg
├── website_name
│ ├── client.go
│ ├── client.options.go
│ ├── server.go
│ └── server.options.go
└── lib
└── lib.go
- 这在惯用语上正确吗?我知道那里没有很多共识,但我想遵循最佳实践。
- 当我运行时,
go build
我得到'意外的模块路径“github.com/ragurney/app_name/cmd/app_name”',但是当我运行go build ./...
它时它可以工作。为什么?
当我移动main.go
到顶层时,一切都按预期工作。我不应该将/cmd
模式与模块一起使用吗?
解决方案
要回答您的第一个问题,它完全是固执己见的,无论您最喜欢什么,对于您应该与之一起使用的其他人来说也很容易理解(我认为这很好)。
要回答您的第二个问题,原因go build ./...
与go build
从根目录相反是因为./...
从当前目录(根目录)开始并搜索所有程序入口点并构建它们。当您main.go
使用这些新信息移动到根目录时,go build
工作就有意义了,因为它只在当前目录中查找。
您可以明确地说go build ./cmd/app_name
哪个也可以。
您的应用程序结构与模块完美配合,因为我使用了与它非常相似的东西(https://www.ardanlabs.com/blog/2017/02/package-orientation-design.html),并且模块对我来说效果很好。
推荐阅读
- graphviz - 添加边缘中断graphviz点布局
- c# - 如何使用 Microsoft.Extensions.Configuration 将值保存到 JSON 配置文件中?
- python - pyenv:python:找不到命令
- php - 如何使用 PHP 从多维数组的表数据中删除所有权重元素?
- r - 带有统计(wilcoxon)检验的箱线图
- android - 注入参数的默认值
- python - pyinstaller,AttributeError:“NoneType”对象没有属性“StaticSource”
- docker - bsub - 分离作业,但在后台保持活动状态
- c# - 正则表达式模式字符串
- azure-functions - Java Azure 功能部署失败 - 无法执行目标 org.apache.maven.plugins