Go 邮件模板入门:把验证码和通知邮件渲染清楚
邮件模板听起来像前端工作,但后端经常要负责生成验证码、邀请链接、账单通知和任务提醒。很多初学项目一开始直接用 拼 HTML,写到第二封邮件时就会变得难维护。Go 的 很适合渲染 HTML 邮件,因为它会自动转义用户数据。
posts
邮件模板听起来像前端工作,但后端经常要负责生成验证码、邀请链接、账单通知和任务提醒。很多初学项目一开始直接用 拼 HTML,写到第二封邮件时就会变得难维护。Go 的 很适合渲染 HTML 邮件,因为它会自动转义用户数据。
找回密码看起来是一个普通功能:用户输入邮箱,系统发送链接,用户点开后设置新密码。真正实现时,最关键的是 token。它必须足够随机,不能长期有效,最好一次性使用,数据库里也不应该明文保存。本文用 Go 写一个入门版密码重置 token 流程。示例不会覆盖完整用户系统,但会把安全边界讲清楚。
从一次查询接口出发,讲 database/sql 里 context 的使用、QueryContext、Scan、Rows 关闭、超时传播和常见连接泄漏问题。
有些 bug 不是你能手写用例想到的 普通单元测试依赖我们自己列举输入。表驱动测试已经能覆盖很多边界,但面对解析器、编码转换、路径处理、压缩数据、模板变量、协议字段这类函数,人很难穷尽所有奇怪输入。模糊测试的思路是:你写出基本性质和种子用例,让工具不断生成新输入,尝试触发 panic、越界、死循环或违反性质的结果。
深入探讨 Go 微服务中的服务发现与注册机制,包括 Consul、etcd、Nacos 集成,健康检查、负载均衡、熔断器和服务网格基础
CSV 导入是很多后台系统都会遇到的功能。用户从表格软件导出一份文件,上传到系统里批量创建用户、商品或订单。Go 标准库的 能完成大部分基础工作,但真正难的是边界:表头不对怎么办,某一行邮箱为空怎么办,转换失败怎么告诉用户,文件很大时能不能逐行处理。
用任务 API 的例子讲 Go 结构化错误设计,包括 sentinel error、自定义错误类型、errors.Is、errors.As 和 HTTP 响应映射。
多模块本地联调不一定要改 go.mod 很多团队会把通用库和业务服务放在不同仓库或不同模块里。比如你正在开发 ,它依赖本地的 模块。以前常见做法是在 里写 : 这能工作,但如果你不小心把个人本地路径提交了,其他同事可能无法构建。
深入讲解如何使用 Go 和 gqlgen 构建 GraphQL API,包括 schema 定义、resolver 实现、mutation、subscription、认证、分页和性能优化
临时文件经常出现在后端任务里:下载一个文件后解析,生成报表后上传,图片转换时落盘,或者调用某个只接受文件路径的外部工具。很多初学者会手写 ,这在并发和安全上都不稳。Go 标准库提供了 和 ,应该优先使用它们。
写后端服务时,外部调用失败是常态。网络会抖,依赖会慢,网关会返回 502,数据库也可能短暂不可用。初学者最容易写出两种极端代码:一种完全不重试,偶发错误直接暴露给用户;另一种无脑重试很多次,把一个小抖动放大成更大的压力。正确做法不是“永远重试”或“永不重试”,而是把超时、退避和幂等性一起考虑。
Go 标准库写 JSON API 并不难,难的是写到第十个接口时还能保持清楚。很多初学项目一开始把所有逻辑塞进 handler:解析 JSON、校验字段、查数据库、拼响应、写错误。前两个接口还行,接口多了以后,错误格式不统一,测试也不好写。
很多导出功能会先把全部数据生成到内存或临时文件,再上传到对象存储。数据少时没问题,数据大时就会占用很多内存或磁盘。Go 的 可以把写入端和读取端连接起来:一边生成,一边被另一边读取,适合流式处理。本文用“生成 CSV 并上传”的例子讲 。它不神秘,但要注意错误传播和关闭顺序,否则很容易卡住。
深入回顾 Go 1.23 的重要特性:range over function 迭代器模式、unique 包、time 改进、slices/maps 新增方法、性能优化与实际应用案例
标准库路由也能写得很舒服 很长一段时间里,很多人写 Go Web 服务会直接选择 Gin、Echo、Chi 这类框架。它们当然好用,但标准库 也一直在进步。现代 Go 的 已经能表达更清楚的路由模式,包括 HTTP 方法和路径参数。对于小型 JSON API、内部工具和学习项目,标准库完全可以胜任。
限流不是大公司才需要的功能。一个公开表单、一个登录接口、一个 AI 调用入口,如果没有任何限制,很容易被误用、刷爆或拖垮下游依赖。对 Go 初学者来说,限流最值得先理解的是“保护边界”:限制请求进入系统的速度,而不是等数据库或外部服务扛不住后再处理错误。
全面介绍使用 cobra 框架构建现代命令行工具,包括命令结构、标志参数、子命令、viper 配置集成、Shell 自动补全、彩色输出和交互式提示
本文讲解 Go 标准库 log/slog 的基本用法,包括文本日志、JSON 日志、字段、With、错误记录和 HTTP 请求日志。
缓存能减轻数据库压力,但缓存失效那一刻也可能制造压力。比如热门用户资料过期,突然来了 200 个请求,如果每个请求都发现缓存没有,然后同时查数据库,数据库会被瞬间打满。这类问题常被称为缓存击穿。的思路是:同一个 key 的并发请求,只让第一个请求真正执行查询,其他请求等它的结果。
从一个小型页面开始讲 Go html/template 的自动转义、安全边界、模板函数和常见误用,适合刚开始写 Go Web 页面的读者。