Go语言技术文章
-
Go 1.26 引入实验性的 goroutineleak profile,让协程泄漏排查从经验判断走向可采样的证据链。文章说明适用场景、旧项目影响、灰度接入和最小验证方法。424 收藏 -
Go 里 context 更适合作为一次请求或一次调用链的边界参数,而不是长期存进结构体。本文从适用压力、典型写法、反例和判断清单讲清什么时候传 ctx,什么时候不要存 ctx。166 收藏 -
Go 1.22 调整了 for 循环变量的作用域语义,常见的 goroutine 闭包引用循环变量问题会少很多。本文用代码对比讲清旧写法痛点、新规则、兼容注意和迁移建议。238 收藏 -
Go 项目日志从 fmt.Println 迁到 slog,不只是换一个打印函数。本文用接口调用链场景讲清 slog 字段设计、上下文传递、Handler 选择、敏感字段处理和灰度接入路径。217 收藏 -
Python 脚本调用外部接口时,如果 requests 不设置 timeout,网络抖动会把 worker 长时间挂住。本文从队列堆积现象入手,讲清排查路径、超时参数、重试策略和上线前检查清单。435 收藏 -
按钮连点、网络重试、支付回调都可能让同一个 Go 接口收到重复请求。本文用 Idempotency-Key 设计一套可落地的防重复提交方案,讲清状态表、锁定窗口、缓存响应和边界处理。367 收藏 -
Golang · Go问答 | 2个月前 | 并发 · channel · select · 性能排查 · Go问答 · select Go channel context default CPU飙高 忙等循环 ticker
Go select 里的 default 会在没有 channel 就绪时立即返回;如果外层套着无限 for,就会形成忙等循环,让 CPU 空转。更稳的写法是阻塞等待、用 ticker 控制检查频率,并用 context 处理退出。438 收藏 -
空调开26度仍觉得热,通常不是温度数字本身的问题,还要看湿度、风向、阳光直晒、滤网灰尘和房间热源。先降温,再看湿度,必要时短时除湿,并避免老人儿童被冷风直吹。193 收藏 -
Go 服务不建议把 /debug/pprof/ 直接暴露到公网。pprof 和 trace 能帮助排障,也可能暴露运行时细节;更稳的做法是本机或内网采集、加鉴权、短时开启并留下操作记录。349 收藏 -
MySQL 多租户订单表变慢时,先用 tenant_id 领头的联合索引稳住常见查询;当热点租户持续拉高 rows、慢日志和队列等待,再考虑租户路由、冷热分流或独立分片。259 收藏 -
Linux 用 rsync 同步目录时,建议先用 dry-run 预览,再用 -a 保留权限、时间和软链接,用 --exclude 排除缓存日志;涉及 --delete 时必须核对源路径尾部斜杠和目标目录。186 收藏 -
Go channel 缓冲区不是越大越好。容量越大只能延后阻塞,不能提升消费者处理能力;高并发场景要按到达速率、处理耗时、可接受延迟和背压策略一起定。377 收藏 -
Golang · Go教程 | 2个月前 | channel · select · Context · Go教程 · 性能排查 · select channel context default time.Ticker Go教程 CPU飙高 for select
Go 里的 select default 适合做非阻塞试探,但放进无等待的 for 循环后,代码会在没有 channel 事件时持续空转,常见表现就是 CPU 飙高、日志刷屏和退出路径混乱。459 收藏 -
Golang · Go问答 | 2个月前 | interface · 单元测试 · 架构设计 · Go问答 · 单元测试 架构设计 interface 接口设计 Go问答 调用方定义 Repository
Go 项目里的 interface 通常更适合由调用方按需要定义,而不是在实现方提前造大接口。判断重点是依赖方向、测试替身、契约大小和未来演进成本。212 收藏 -
Golang · Go问答 | 2个月前 | JSON · 接口设计 · Go问答 · encoding/json · encoding/json API响应 JSON序列化 time.Time omitempty Go问答 omitzero
Go 里 time.Time 是结构体零值,旧的 omitempty 不会按很多人期待的方式省略它。Go 1.24 起可用 omitzero;需要区分缺失和有值时,用 *time.Time 更清楚。315 收藏