Go语言技术文章
-
按钮连点、网络重试、支付回调都可能让同一个 Go 接口收到重复请求。本文用 Idempotency-Key 设计一套可落地的防重复提交方案,讲清状态表、锁定窗口、缓存响应和边界处理。367 收藏 -
Golang · Go问答 | 3天前 | 并发 · channel · select · 性能排查 · Go问答 · select Go channel context default CPU飙高 忙等循环 ticker
Go select 里的 default 会在没有 channel 就绪时立即返回;如果外层套着无限 for,就会形成忙等循环,让 CPU 空转。更稳的写法是阻塞等待、用 ticker 控制检查频率,并用 context 处理退出。438 收藏 -
空调开26度仍觉得热,通常不是温度数字本身的问题,还要看湿度、风向、阳光直晒、滤网灰尘和房间热源。先降温,再看湿度,必要时短时除湿,并避免老人儿童被冷风直吹。193 收藏 -
Golang · Go问答 | 3天前 | pprof · trace · 性能排查 · Go问答 · 服务安全 · Go pprof 生产环境 trace 安全入口 net/http/pprof 性能排障
Go 服务不建议把 /debug/pprof/ 直接暴露到公网。pprof 和 trace 能帮助排障,也可能暴露运行时细节;更稳的做法是本机或内网采集、加鉴权、短时开启并留下操作记录。349 收藏 -
MySQL 多租户订单表变慢时,先用 tenant_id 领头的联合索引稳住常见查询;当热点租户持续拉高 rows、慢日志和队列等待,再考虑租户路由、冷热分流或独立分片。259 收藏 -
Linux 用 rsync 同步目录时,建议先用 dry-run 预览,再用 -a 保留权限、时间和软链接,用 --exclude 排除缓存日志;涉及 --delete 时必须核对源路径尾部斜杠和目标目录。186 收藏 -
Golang · Go问答 | 3天前 | channel · 并发编程 · Go问答 · 背压 · 容量规划 · Goroutine channel 缓冲区 背压 Go问答 buffered channel 并发容量
Go channel 缓冲区不是越大越好。容量越大只能延后阻塞,不能提升消费者处理能力;高并发场景要按到达速率、处理耗时、可接受延迟和背压策略一起定。377 收藏 -
Golang · Go教程 | 3天前 | channel · select · Context · Go教程 · 性能排查 · select channel context default time.Ticker Go教程 CPU飙高 for select
Go 里的 select default 适合做非阻塞试探,但放进无等待的 for 循环后,代码会在没有 channel 事件时持续空转,常见表现就是 CPU 飙高、日志刷屏和退出路径混乱。459 收藏 -
Golang · Go问答 | 3天前 | interface · 单元测试 · 架构设计 · repository · Go问答 · 单元测试 架构设计 interface 接口设计 Go问答 调用方定义 Repository
Go 项目里的 interface 通常更适合由调用方按需要定义,而不是在实现方提前造大接口。判断重点是依赖方向、测试替身、契约大小和未来演进成本。212 收藏 -
Golang · Go问答 | 3天前 | JSON · time.Time · 接口设计 · Go问答 · encoding/json · encoding/json API响应 JSON序列化 time.Time omitempty Go问答 omitzero
Go 里 time.Time 是结构体零值,旧的 omitempty 不会按很多人期待的方式省略它。Go 1.24 起可用 omitzero;需要区分缺失和有值时,用 *time.Time 更清楚。315 收藏 -
Golang · Go问答 | 3天前 | HTTP · Cookie · 浏览器 · cors · Go问答 · SameSite · cookie cors Secure SameSite Go问答 Set-Cookie 跨站请求 credentials
Go 接口已经返回 Set-Cookie,但浏览器下一次请求不带 Cookie,通常要同时检查 SameSite、Secure、Domain、Path、CORS 和前端 credentials。246 收藏 -
Golang · Go问答 | 3天前 | 中间件 · Context · Go问答 · 架构模式 · 代码边界 · 中间件 context Context.Value Go问答 WithValue 请求作用域 业务参数
Go context 可以放用户 ID、traceID 这类请求作用域值,但不适合替代函数参数。本文用中间件、Service 和 Repository 的边界示例说明怎么判断。269 收藏 -
Golang · Go教程 | 3天前 | map · 基准测试 · 性能优化 · Go教程 · 内存分配 · 内存分配 Go性能优化 benchmark Go教程 map预分配 make map benchmem
Go map 预分配不是玄学优化。本文用一个可复测 benchmark 说明 make(map, n) 如何减少扩容、降低 B/op 和 allocs/op,并给出适用边界。395 收藏 -
Golang · Go问答 | 3天前 | JSON · 后端开发 · Go问答 · encoding/json · 接口解析 · JSON解析 encoding/json DisallowUnknownFields Go问答 RawMessage json.Decoder UseNumber
Go 解析 JSON 不只看写法短不短。本文围绕字段稳定性、数据量、数字精度、未知字段和延迟解析,比较 struct、map、RawMessage 与 Decoder 的适用场景。151 收藏 -
Golang · Go教程 | 3天前 | defer · 单元测试 · testing · Go教程 · t.Cleanup · defer 单元测试 Testing 子测试 Go教程 T.Cleanup 测试资源清理
Go 测试代码里的临时文件、测试库、测试服务和环境变量,最好让清理动作跟随 testing.T 生命周期。本文对比 defer 和 t.Cleanup 的适用边界,给出可落地迁移清单。418 收藏