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

如您所知,Go 是面向 OOP imo 的一种现代方法,具有诸如强制您使用组合而不是继承之类的绝妙方法。我只是想了解如何根据文件夹和包结构来设计编写良好的 go 代码。

我只是想知道这种类似 React 的方法是否可以在下面看到 - 将应用程序作为组件划分到不同的包中是否可以工作?

或者你能给我一个例子、链接、关于 web api 的文件夹/打包方面的良好结构的想法。Go 只会是我的开源项目的后台 api,在客户端,我计划有一个单页 React 应用程序顺便说一句。

非常感谢,

http://img3.mukewang.com/61d3b0cc0001bb4b08130508.jpg

茅侃侃
浏览 171回答 2
2回答

萧十郎

标准 Go 项目布局GitHub 上有一个拥有很多星星的 Repo(截至撰写本文时为 22k) 这种方法实际上非常完整,但对于较小的项目来说可能有点过头了。https://github.com/golang-standards/project-layoutGo 目录(基础)文件夹描述/cmd本项目的主要应用。/内部的私有应用程序和库代码。/包外部应用程序可以使用的库代码。/小贩应用程序依赖项(手动管理或由您最喜欢的依赖项管理工具管理,例如新的内置 Go Modules 功能)。服务应用目录文件夹描述/apiOpenAPI/Swagger 规范、JSON 模式文件、协议定义文件。Web 应用程序目录文件夹描述/网络Web 应用程序特定组件:静态 Web 资产、服务器端模板和 SPA。通用应用程序目录文件夹描述/配置配置文件模板或默认配置。/在里面系统初始化(systemd、upstart、sysv)和进程管理器/主管(runit、supervisord)配置。/脚本执行各种构建、安装、分析等操作的脚本。/建造打包和持续集成。/部署IaaS、PaaS、系统和容器编排部署配置和模板。/测试其他外部测试应用程序和测试数据。其他目录文件夹描述/文档设计和用户文档(除了你的 godoc 生成的文档)。/工具本项目的支持工具。/例子您的应用程序和/或公共图书馆的示例。/第三者外部帮助工具、分叉代码和其他 3rd 方实用程序(例如 Swagger UI)。/githooksGit 钩子。/资产与您的存储库一起使用的其他资产(图像、徽标等)。/网站如果您不使用 GitHub 页面,这里是放置项目网站数据的地方。

森林海

我倾向于将我的应用程序构建为: $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 将您的工作目录设置为您的项目根目录。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go