Go问答
已收录文章:102篇
-
Golang · Go问答 | 2个月前 | 并发 · 性能优化 · sync.Pool · bytes.Buffer · Go问答 · reset bytes.Buffer 对象复用 Go sync.Pool 数据串行sync.Pool 复用 bytes.Buffer 时,旧内容残留和过早归还都会让响应出现串数据。本文从现象、最小复现到 Reset 与归还时机,给出可直接用于编码响应的安全写法。294 收藏
-
Golang · Go问答 | 2个月前 | golang · errgroup · Context · 并发控制 · Go问答 · 错误传播 Go errgroup.SetLimit errgroup.WithContext Go 并发限制 批量调用 context 取消批量请求第三方接口时,errgroup.WithContext 配合 SetLimit 能把并发上限、首个错误返回和派生上下文取消放进同一段代码。这里给出可直接核对的最小写法、限额取值与几个容易卡住的边界。467 收藏
-
Golang · Go问答 | 2个月前 | WaitGroup · golang · goroutine · 并发编程 · Go问答 · 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问答 | 2个月前 | 性能排查 · net/http · HTTP客户端 · Go问答 · 连接复用 keep-alive http.Transport Response.Body Go HTTP ClientGo 服务的请求量并不高,客户端却不断新建 TCP 连接时,先看 Response.Body 是否在所有分支读到 EOF 并关闭。Go 官方文档说明,Body 未同时读完和关闭时,底层 Transport 可能无法复用持久连接。本文从一次连接数异常的现场出发,给出定位、修复和边界判断。241 收藏
-
Go 服务出现 too many open files 时,先不要只把 ulimit 调大。更可靠的处理顺序是确认 FD 是否持续增长、按类型定位 HTTP 响应体/文件/SQL Rows 的释放缺口、在小流量修复后观察 FD 回落,再决定是否需要调整进程限额。文章给出可直接照着做的线上判断、代码修复、回退和告警检查。115 收藏
-
Go 的 time.Parse 不认识 YYYY-MM-DD 这类常见日期格式符,它用 2006-01-02 这组参考时刻来描述布局。文章从解析失败的报错入手,给出最小修复、UTC 与业务时区的边界、ParseError 的定位字段和可回归的日期测试,避免日期字段在接口或报表中悄悄偏移。443 收藏
-
Golang · Go问答 | 2个月前 | HTTP · net/http · Go问答 · Go WriteHeader ResponseWriter HTTP 状态码 superfluous response.WriteHeaderGo 服务日志出现 superfluous response.WriteHeader,通常不是框架故障,而是同一个请求路径已经写出最终状态码,后续分支又继续写了一次。文章用一个订单创建接口复现问题,解释 Write 与 WriteHeader 的先后边界,并给出 return 收口、响应助手分层和 httptest 回归检查的最小修复方案。258 收藏
-
Go 把切片传入函数时,底层数组可能仍被共享,但切片头会按值传递。文章用最小示例解释 append 后为什么调用方的长度不变,给出返回新切片、指针修改与预分配三种边界清楚的写法,并说明 cap 足够时容易看到的隐藏覆盖。226 收藏
-
Go 1.23 支持对特定函数类型使用 for range。文章给出 iter.Seq 的最小写法,解释 yield 返回 false 的停止契约、三种允许签名、go.mod 版本边界和面向旧工具链的采用建议。251 收藏
-
Golang · Go问答 | 2个月前 | interface · 测试 · 架构设计 · Go问答 · Go 接口设计 接口定义位置 Go mock accept interfaces return structs Go 架构Go 接口通常应放在使用方包里,而不是实现方为了 mock 提前导出一大组接口。本文通过调用方依赖、真实测试与多实现边界,说明什么时候该定义小接口,什么时候直接返回具体类型更清晰。300 收藏
-
Golang · Go问答 | 2个月前 | goroutine · Context · Go问答 · goroutine泄漏 context.WithTimeout Go问答 CancelFunc Go context取消 Go服务超时Go 服务已经返回超时,但后台 goroutine 仍在消耗连接和内存,往往不是超时参数太小,而是取消信号没有沿调用链传递或 CancelFunc 没有及时调用。本文给出从症状判断、代码修复到告警复盘的排查清单。304 收藏
-
Golang · Go问答 | 3个月前 | 并发 · channel · Mutex · 性能优化 · Go问答 · Goroutine channel Mutex 并发性能 锁等待 benchmark Go问答Go 里 Mutex 和 channel 不是谁绝对更快。保护一个共享变量时,Mutex 往往更直接;交接任务、串联 worker、表达所有权转移时,channel 更自然。判断时别只盯 ns/op,要看临界区、队列等待和业务动作。268 收藏