Go问答
已收录文章:38篇
-
Go Webhook 先验签再解析却得到 EOF,通常不是 JSON 有问题,而是 r.Body 已被提前读完。用单一读取边界、长度限制和常量时间比较,把验签与业务解析放回同一条可信数据路径。493 收藏
-
Golang · Go问答 | 1天前 | net/http · Go问答 · 接口安全 · 版本迁移 · ServeMux · net/http 通配符 路由冲突 ServeMux Go 1.22 PathValueGo 1.22 改造了 net/http.ServeMux 的模式语法和优先级,旧项目迁移时最容易踩到方法覆盖、通配符冲突和大括号语义变化。本文用最小代码验证匹配规则、冲突触发条件和上线前的兼容检查。490 收藏
-
Go 的 POST 请求第一次失败后重试,服务端却读到空 Body,通常不是服务端丢数据,而是请求体只被消费了一次。本文用 bytes.Reader、GetBody 和两次请求日志拆开这个问题,给出可验证的重试写法与边界。488 收藏
-
Golang · Go问答 | 3星期前 | 单元测试 · HTTP · Go问答 · httptest · ResponseRecorder · 单元测试 HTTP响应 httptest Go问答 ResponseRecorder Handler测试Go 用 httptest 写 Handler 单测时,常见现象是状态码为 0、响应头没生效,或读到的响应体为空。关键是区分 ResponseRecorder 的记录时机、WriteHeader 的提交边界,以及 Result 必须在 Handler 返回后再读取。文中给出可复用的最小测试和复查清单。481 收藏
-
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。479 收藏
-
Golang · Go问答 | 2星期前 | golang · 并发编程 · bytes.Buffer · 内存管理 · Go问答 · bytes reset bytes.Buffer Go内存 切片别名Go 里把 bytes.Buffer.Bytes() 返回的切片保存下来,再复用 Buffer 写下一条消息,旧数据为什么会跟着变化?关键在于 Bytes 返回的是底层数组视图,不是独立副本。本文用消息编码场景说明 Reset、切片别名、Clone 拷贝和并发边界,给出可复查的安全写法。470 收藏
-
Golang · Go问答 | 3星期前 | golang · errgroup · Context · 并发控制 · Go问答 · SetLimit · 错误传播 Go errgroup.SetLimit errgroup.WithContext Go 并发限制 批量调用 context 取消批量请求第三方接口时,errgroup.WithContext 配合 SetLimit 能把并发上限、首个错误返回和派生上下文取消放进同一段代码。这里给出可直接核对的最小写法、限额取值与几个容易卡住的边界。467 收藏
-
Golang · Go问答 | 1星期前 | 超时 · Context · 并发控制 · Go问答 · 请求生命周期 · Go 后台任务 Deadline 请求取消 context.Cause context.WithoutCancelcontext.WithoutCancel 可以让派生上下文忽略上游取消,但它会同时失去 Deadline、Err 和 Done。本文用 HTTP 请求收尾场景对比 WithoutCancel、WithTimeout 和 WithCancelCause,给出可验证的后台任务边界和回归指标。465 收藏
-
Golang · Go问答 | 3星期前 | WaitGroup · golang · goroutine · 并发编程 · Go问答 · Go 1.25 · Goroutine 并发 WaitGroup Go 1.25 sync.WaitGroup.Go Add DoneGo 1.25 为 sync.WaitGroup 增加了 Go 方法,常见的 Add、go func、defer Done 三段式可以收成一次调用。它能减少计数配对遗漏,却不会替业务处理 panic、取消或结果收集。本文用批量写入场景解释最小写法、和旧写法的边界差异、版本兼容与复用 WaitGroup 时容易忽略的顺序。448 收藏
-
Golang · Go问答 | 3星期前 | time.Parse · 时间处理 · Go问答 · Go基础 · 日期解析 · Go 日期解析 time.Parse YYYY-MM-DD 2006-01-02Go 的 time.Parse 不认识 YYYY-MM-DD 这类常见日期格式符,它用 2006-01-02 这组参考时刻来描述布局。文章从解析失败的报错入手,给出最小修复、UTC 与业务时区的边界、ParseError 的定位字段和可回归的日期测试,避免日期字段在接口或报表中悄悄偏移。443 收藏
-
Golang · Go问答 | 2星期前 | channel · sync.Cond · 架构设计 · 并发编程 · Go问答 · Go channel 条件变量 sync.Cond 并发等待 广播唤醒Go 的 sync.Cond 和 channel 都能让 goroutine 等待,但它们解决的不是同一个问题。本文从库存闸门和批量任务队列两个场景出发,比较条件变量的广播唤醒、channel 的消息传递、锁边界和关闭语义,并给出可运行的最小写法与选型判断。432 收藏
-
批量计算文件 SHA-256 时,直接为每个文件启动 goroutine 很容易把磁盘和句柄拖满。本文用一个可取消的小工具演示如何用 context、固定 worker 数和结果汇总,把停止、错误和部分结果处理清楚。419 收藏