猿问

使用 /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

  1. 这在惯用语上是正确的吗?我知道那里没有太多共识,但我想遵循最佳实践。

  2. 当我运行时,go build我得到“意外的模块路径“github.com/ragurney/app_name/cmd/app_name””,但是当我运行时go build ./...它有效。为什么?

当我移动main.go到顶层时,一切都按预期工作。我不应该将/cmd模式与模块一起使用吗?


PIPIONE
浏览 89回答 3
3回答

BIG阳

要回答您的第一个问题,它完全是自以为是,无论您最喜欢什么,对于您应该接受的其他人来说也很容易理解(我认为这很好)。go build ./...要回答你的第二个问题,而不是go build从根目录开始工作的原因是因为./...从当前目录(根目录)开始并搜索所有程序入口点并构建它们。当您移动main.go到根目录时,有了这些新信息,go build工作就有意义了,因为它只在当前目录中查找。您可以明确说明go build ./cmd/app_name哪个也有效。您的应用程序结构与模块完美配合,因为我使用的是与它非常相似的东西 。

饮歌长啸

据我所知,您的项目结构没有任何问题。对我有用的是从项目根目录运行 go build/run 命令例如。 go run github.com/username/project/cmd/somecommandgo build -o somebinary github.com/username/project/cmd/somecommand

九州编程

我更喜欢添加特定的文件来构建,有些项目有多个可执行文件go build -o app ./cmd/server/main.go
随时随地看视频慕课网APP

相关分类

Go
我要回答