如你所知,Go是OOP imo的一种现代方法,有一些很棒的东西,比如强迫你使用构图而不是继承。我只是想了解如何在文件夹和包结构方面设计一个编写良好的代码。
我只是想知道下面可以看到这个React类似的方法 - 将app作为组件划分到不同的包可以工作吗?
或者你可以给我一个例子,链接,想法在web api的文件夹/打包方面有一个好的结构。 Go将只是我的开源项目背景中的api,在客户端我计划有一个单页的React应用程序btw。
非常感谢,
答案 0 :(得分: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是命令行应用程序。通常它只是一个应用程序(您的Web服务器)。
lib / *就是你所拥有的任何隔离的功能。
通常,我从cmd / app1开始,然后在项目变得足够复杂时扩展到lib。
制作静态文件服务器(假设你有),使用" html"作为目录。
对于数据库迁移,我使用了一个非常简单的迁移器,因为我发现其他迁移器太复杂/太大了。
Here's the code我在我的项目中使用。
我想把它变成一个真正的库,但我很确定这是postgresql特有的,因为它假设DDL是事务性的。
使用这种结构,你可以简单地(从项目根目录):
go install ./... && app1
构建/测试您的应用。
如果您希望部署到Heroku,这个结构也会自然地工作,因为heroku将您的工作目录设置为项目根目录。
答案 1 :(得分:2)
GitHub 上有一个拥有很多星星的 Repo(撰写本文时为 22k) 这种方法实际上非常完整,但对于较小的项目来说可能有点矫枉过正。
https://github.com/golang-standards/project-layout
文件夹 | 说明 |
---|---|
/cmd | 该项目的主要应用。 |
/内部 | 私有应用程序和库代码。 |
/pkg | 可供外部应用程序使用的库代码。 |
/供应商 | 应用程序依赖项(手动管理或由您最喜欢的依赖项管理工具管理,例如新的内置 Go Modules 功能)。 |
文件夹 | 说明 |
---|---|
/api | OpenAPI/Swagger 规范、JSON 架构文件、协议定义文件。 |
文件夹 | 说明 |
---|---|
/web | Web 应用程序特定组件:静态 Web 资产、服务器端模板和 SPA。 |
文件夹 | 说明 |
---|---|
/configs | 配置文件模板或默认配置。 |
/init | 系统初始化(systemd、upstart、sysv)和进程管理器/主管(runit、supervisord)配置。 |
/scripts | 执行各种构建、安装、分析等操作的脚本。 |
/build | 打包和持续集成。 |
/部署 | IaaS、PaaS、系统和容器编排部署配置和模板。 |
/测试 | 额外的外部测试应用和测试数据。 |
文件夹 | 说明 |
---|---|
/docs | 设计和用户文档(除了您的 godoc 生成的文档)。 |
/工具 | 此项目的支持工具。 |
/示例 | 您的应用程序和/或公共库的示例。 |
/third_party | 外部辅助工具、分叉代码和其他 3rd 方实用程序(例如 Swagger UI)。 |
/githooks | Git 钩子。 |
/assets | 与您的存储库一起使用的其他资产(图像、徽标等)。 |
/网站 | 如果您不使用 GitHub 页面,这里是放置项目网站数据的地方。 |