gpt4 book ai didi

go - 单个 go 项目使用的 go 包的正确文件夹结构

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:05 28 4
gpt4 key购买 nike

我目前正在开始使用 Go,并且已经深入研究了有关包命名和工作区文件夹结构的注意事项。

不过,我不太确定如何根据 Go 范式正确组织我的代码。

这是我当前的结构示例,它位于 $GOPATH/src 中:

github.com/myusername/project
|-- main.go
+-- internal
+---- config
|------ config.go

所以我有一个名为 project 的项目,它使用 config 包,而该包又以一种只应由 project 使用的方式专门化。因此,我不希望它位于 github.com/myusername/config 下,对吗?

现在的问题是,使用内部包结构是否“好”,或者我应该将我的项目特定包放在 github.com/myusername/$pkgname 下并以某种方式表明它属于到 project(例如,将其命名为 projectconfig)?

最佳答案

如果您的项目只生成一个程序,那么最常见的结构就是您提到的结构。

如果您的项目产生多个程序,通常的做法是使用如下结构:

<project>/
cmd/
prog1/
main.go
prog2/
main.go

如果您的项目将 Go 代码公开为库供第三方使用,最常见的结构是使用项目的根目录公开域模型和 API。

<project>/
model.go
api.go

这适用于第三方代码,只需导入“github.com/user/project”并提供可用的模型和 api。

常见的是第二个和第三个选项的组合。

拥有用于封装依赖项使用的包也被认为是一种很好的做法。例如。假设你的项目使用 Elasticsearch 客户端

<project>/
cmd/
prog1/
main.go
elastic/
impl.go
dao.go
model.go

所以在 dao.go 中你定义了 dao 的 API,然后在 elastic/impl.go 中你(导入弹性库、域模式和)根据弹性定义 DAO 的实现。最后,您从生成实际程序的 main.go 导入所有内容。

参见 this关于这个问题的精彩而简短的介绍。

关于go - 单个 go 项目使用的 go 包的正确文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41533693/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com