为了账号安全,请及时绑定邮箱和手机立即绑定

Web 应用程序的 Go Lang 文件夹结构

Web 应用程序的 Go Lang 文件夹结构

Go
茅侃侃 2022-01-04 10:28:11
如您所知,Go 是面向 OOP imo 的一种现代方法,具有诸如强制您使用组合而不是继承之类的绝妙方法。我只是想了解如何根据文件夹和包结构来设计编写良好的 go 代码。我只是想知道这种类似 React 的方法是否可以在下面看到 - 将应用程序作为组件划分到不同的包中是否可以工作?或者你能给我一个例子、链接、关于 web api 的文件夹/打包方面的良好结构的想法。Go 只会是我的开源项目的后台 api,在客户端,我计划有一个单页 React 应用程序顺便说一句。非常感谢,
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

标准 Go 项目布局

GitHub 上有一个拥有很多星星的 Repo(截至撰写本文时为 22k) 这种方法实际上非常完整,但对于较小的项目来说可能有点过头了。

https://github.com/golang-standards/project-layout

Go 目录(基础)

文件夹描述
/cmd本项目的主要应用。
/内部的私有应用程序和库代码。
/包外部应用程序可以使用的库代码。
/小贩应用程序依赖项(手动管理或由您最喜欢的依赖项管理工具管理,例如新的内置 Go Modules 功能)。

服务应用目录

文件夹描述
/apiOpenAPI/Swagger 规范、JSON 模式文件、协议定义文件。

Web 应用程序目录

文件夹描述
/网络Web 应用程序特定组件:静态 Web 资产、服务器端模板和 SPA。

通用应用程序目录

文件夹描述
/配置配置文件模板或默认配置。
/在里面系统初始化(systemd、upstart、sysv)和进程管理器/主管(runit、supervisord)配置。
/脚本执行各种构建、安装、分析等操作的脚本。
/建造打包和持续集成。
/部署IaaS、PaaS、系统和容器编排部署配置和模板。
/测试其他外部测试应用程序和测试数据。

其他目录

文件夹描述
/文档设计和用户文档(除了你的 godoc 生成的文档)。
/工具本项目的支持工具。
/例子您的应用程序和/或公共图书馆的示例。
/第三者外部帮助工具、分叉代码和其他 3rd 方实用程序(例如 Swagger UI)。
/githooksGit 钩子。
/资产与您的存储库一起使用的其他资产(图像、徽标等)。
/网站如果您不使用 GitHub 页面,这里是放置项目网站数据的地方。


查看完整回答
反对 回复 2022-01-04
?
森林海

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 将您的工作目录设置为您的项目根目录。


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信