2 回答
TA贡献1815条经验 获得超13个赞
标准 Go 项目布局
GitHub 上有一个拥有很多星星的 Repo(截至撰写本文时为 22k) 这种方法实际上非常完整,但对于较小的项目来说可能有点过头了。
https://github.com/golang-standards/project-layout
Go 目录(基础)
文件夹 | 描述 |
---|---|
/cmd | 本项目的主要应用。 |
/内部的 | 私有应用程序和库代码。 |
/包 | 外部应用程序可以使用的库代码。 |
/小贩 | 应用程序依赖项(手动管理或由您最喜欢的依赖项管理工具管理,例如新的内置 Go Modules 功能)。 |
服务应用目录
文件夹 | 描述 |
---|---|
/api | OpenAPI/Swagger 规范、JSON 模式文件、协议定义文件。 |
Web 应用程序目录
文件夹 | 描述 |
---|---|
/网络 | Web 应用程序特定组件:静态 Web 资产、服务器端模板和 SPA。 |
通用应用程序目录
文件夹 | 描述 |
---|---|
/配置 | 配置文件模板或默认配置。 |
/在里面 | 系统初始化(systemd、upstart、sysv)和进程管理器/主管(runit、supervisord)配置。 |
/脚本 | 执行各种构建、安装、分析等操作的脚本。 |
/建造 | 打包和持续集成。 |
/部署 | IaaS、PaaS、系统和容器编排部署配置和模板。 |
/测试 | 其他外部测试应用程序和测试数据。 |
其他目录
文件夹 | 描述 |
---|---|
/文档 | 设计和用户文档(除了你的 godoc 生成的文档)。 |
/工具 | 本项目的支持工具。 |
/例子 | 您的应用程序和/或公共图书馆的示例。 |
/第三者 | 外部帮助工具、分叉代码和其他 3rd 方实用程序(例如 Swagger UI)。 |
/githooks | Git 钩子。 |
/资产 | 与您的存储库一起使用的其他资产(图像、徽标等)。 |
/网站 | 如果您不使用 GitHub 页面,这里是放置项目网站数据的地方。 |
TA贡献2011条经验 获得超2个赞
我倾向于将我的应用程序构建为:
$GOPATH/github.com/yourname/projectname/
cmd/
app1/
main.go
app2/
main.go
db/
001_initial_schema.sql
002_add_timestamps.sql
... etc ...
lib/
lib1/
lib2/
html/
..all the html stuff..
其中 app1/app2 是命令行应用程序。通常它只是一个应用程序(您的网络服务器)。
lib/* 就是您拥有的任何隔离功能。
通常,我从 cmd/app1 开始,然后在项目变得足够复杂时扩展到 lib。
并制作您的静态文件服务器(假设您有一个),使用“html”作为目录。
对于数据库迁移,我使用了一个非常简单的迁移器,因为我发现其他迁移器太复杂/太大了。
这是我在项目中使用的代码。
我想把它变成一个真正的库,但我很确定这是 postgresql 特定的,因为它假设 DDL 是事务性的。
使用此结构,您可以简单地(从项目根目录)执行以下操作:
go install ./... && app1
构建/测试您的应用程序。
如果您随后想要部署到 Heroku,这种结构也自然会起作用,因为 heroku 将您的工作目录设置为您的项目根目录。
- 2 回答
- 0 关注
- 170 浏览
添加回答
举报