指南
tug 指南
本页翻译之后,英文原文又有改动,因此这里的内容可能已经过时。 阅读英文原文
tug 是一个 Web 框架,面向前端使用 Inertia.js 的 Go 应用:Go 处理函数用 props 渲染 React、Vue 或 Svelte 页面,中间无需 API,整个应用以单个二进制文件发布。本指南从新建应用一直讲到部署上线。其余细节请参阅 pkg.go.dev 上各个包自己的文档。
- 快速上手
安装 tug,创建并运行应用,再添加一个页面和一个表单。
- 路由与处理函数
App、路由、绝对链接与签名链接、路由组、中间件(其中包括安全响应头)、响应了请求的路由、代理之后的客户端地址、
Ctx、文件、下载、流与事件、请求绑定,以及错误。 - 页面
Inertia 页面及其 props、根模板及其 nonce、延后计算的 props、共享 props、重定向、页面上的下载与事件、错误页面、Vite,以及 Inertia 的 DevTools。
- 服务端渲染
首次访问时,由应用旁边的 Node 在服务端渲染页面,以及
ssr包。 - 表单与会话
验证、应用自己的规则、离开字段时就检查该字段的表单、flash 消息、会话,以及 CSRF。
- 多语言
用请求的语言显示 tug 和应用的文字,每种语言一个文件;
lang包,以及tug lang。 - 文件
上传的文件,按大小和实际类型检查,用
storage包保存在应用的磁盘或 S3 上,以及指向它们的公开链接或签名链接。 - 账户
认证脚手架,可用 SQLite、Postgres 或 MySQL,及其 API 令牌和通知;
auth和mail包,后者支持抄送、附件和一键退订链接。 - 数据库迁移
数据库的表由 SQL 文件创建和修改,每个文件只运行一次,在应用启动时按顺序运行,也可以通过应用的
migrate命令运行;用tug migrate new创建下一个迁移;以及migrate包。 - 授权
用户可以对某个对象做什么,
auth包的权限(ability),拒绝时返回说明原因的 403,以及在页面的 props 中给出当前用户可以做什么。 - 加密
应用的密钥,tug 用它加密和签名的内容,用来加密应用自身数据的
crypt包,以及密钥轮换。 - 后台任务
queue包,用于比请求持续更久的工作:失败时重新运行;按计划运行,也可以按指定的时区;无论被请求多少次,都只排队一次;或者在所有实例上合计,限制同时运行多少个、每秒运行多少个;并告知任务何时彻底失败,以及每次运行的情况。 - 缓存
cache包,用于计算起来很慢的结果,存放在应用的每个实例都能找到的地方;以及锁,用于不能同时运行两次的操作。 - 广播
broadcast包,频道上的事件,由应用的数据库送到每个实例上打开的页面,页面随即重新加载变化的部分。 - TypeScript
tug gen根据 Go 代码写出的类型。 - 测试
tugtest包,即供 Go 测试使用的 Inertia 客户端,用来测试应用的页面、表单、上传和登录;用来测试邮件的mailtest;以及应用的事件。 - 部署
单个二进制文件、Dockerfile、环境变量、由应用自身提供的 HTTPS 及来自 Let's Encrypt 的证书,规定浏览器可以如何对待应用页面的响应头(其中包括 Content-Security-Policy),日志,以及指标。
- 命令行工具
tug new、tug dev、tug gen、tug routes、tug lang、tug migrate、tug build和tug key的完整说明。