go
已收录文章:159篇
-
接口定义已经改了,生成的 Go 文件却忘了提交,是多人协作里很隐蔽的一类问题。本文从生成入口、差异检查、提交前核对和 CI 门禁四个环节,搭建一套让 Protobuf 代码漂移无处藏身的 Go 项目工作流。473 收藏
-
Golang · Go教程 | 2个月前 | golang · HTTP · go · 服务端 · http.server MaxBytesReader ReadHeaderTimeout Go HTTP 服务 请求体限制 响应头限制Go 的 http.Server 默认足够启动一个接口,却不会替业务限定大请求体、慢请求头和响应写入时间。本文用上传接口的真实边界,拆解 MaxBytesReader、ReadHeaderTimeout、WriteTimeout 与 MaxHeaderBytes 的职责,并给出可复查的生产配置。455 收藏
-
Go 从 channel 接收时,关闭后的读取会立刻返回元素类型的零值。本文用订单事件场景说明如何用第二个返回值 ok 区分真实数据、关闭信号与业务结束条件,并给出可复查的写法。333 收藏
-
大模型流式输出不能把每个分片当成完整 JSON。用缓冲区、完成事件、事务与请求幂等键,把半截内容和重试写入挡在数据库之外。186 收藏
-
商品详情页把库存、价格和活动状态合成一次 MGET 后,在 Redis Cluster 里突然报 CROSSSLOT,根因往往不是客户端,而是同一业务实体的 Key 没有落到同一个槽位。本文用 CLUSTER KEYSLOT、Hash Tag 和迁移期检查拆出一条可复查的修复路径。259 收藏
-
Golang · Go教程 | 2个月前 | golang · 缓存 · singleflight · go · 高并发 · 后端开发 · Go 并发控制 缓存失效 请求合并 singleflight 回源一个热门缓存键刚失效时,几百个请求可能同时回源,把数据库或下游接口推到峰值。Go 的 golang.org/x/sync/singleflight 能让同一个 key 的重叠调用只保留一趟加载,其余调用等待并复用结果。这里用一个商品读取场景说明放置位置、key 范围、多实例边界、错误传播和上线核对项。109 收藏
-
Go 的传统 encoding/json 会把 nil slice 编码为 null,把已初始化的空切片编码为 []。先由接口契约决定返回形状,再在成功响应的边界归一化并用测试锁定,避免前端空列表处理出现分支。392 收藏
-
Golang · Go教程 | 2个月前 | golang · 配置 · 设计模式 · go · client · api设计 · Go 构造函数 Functional Options 函数选项 Client 配置 API 兼容Functional Options 适合“少量必填参数稳定、可选项会逐步增加”的 Go Client 构造场景。它能避免频繁改函数签名,并让调用点保留 WithTimeout、WithRetry 这类具名配置;但配置总是成组出现、需要从文件反序列化,或只有一个可选值时,Config 结构体或新增构造函数往往更直接。关键不在模式名称,而在默认值、重复选项与兼容边界是否明确。454 收藏
-
Go 1.22 将 for 循环声明的变量改为每次迭代独立,但新语义是否生效取决于模块 go.mod 的 go 版本:只有声明 go 1.22 或更高版本的模块会启用。升级时应重点复查 goroutine、闭包和 t.Parallel 子测试;旧版模块中的变量拷贝仍可能是必要保护,不能只因编译器升级就批量删除。277 收藏
-
Golang · Go教程 | 2个月前 | 并发 · 错误处理 · go · Context · 排错 · Go 错误链 context.WithCancelCause context.Cause 取消原因一次请求提前结束时,ctx.Err() 往往只剩下 context.Canceled。用 context.WithCancelCause 和 context.Cause 可以保留真正的中断原因,并把它用于日志、指标和调用方处理;关键是区分父子 Context 的先后关系。366 收藏
-
从一次发布后异步任务少处理的故障出发,拆解 Go worker pool 的关闭顺序:先停止接收、再关闭任务输入、让 worker 排空并由 WaitGroup 收尾,同时说明超时退出与任务持久化的边界。207 收藏
-
从一个大租户挤占接口容量的场景出发,讲清 Go 服务如何按全局、租户和路由拆分限流边界,单实例如何用 x/time/rate 落地,以及多实例为什么需要共享预算。294 收藏