Go问答技术文章
-
解释 Go sync.WaitGroup 把 Add 放进 goroutine 的竞态窗口,并给出先计数再启动任务的安全写法、循环边界和排查清单。308 收藏 -
Go modgo 报错时,实际应从 go.mod 的 go 指令、模块图和 tidy 三个边界排查。本文用 go env GOMOD、go list -m all、go mod graph、go mod why -m 和 tidy -diff 定位依赖变化来源。308 收藏 -
Golang · Go问答 | 2个月前 | GC · sync.Pool · bytes.Buffer · 内存优化 · Go问答 · Go 垃圾回收 内存占用 对象池 sync.Pool bytes.Buffer buffer复用
Go 服务用 sync.Pool 复用 bytes.Buffer 后,流量回落时 RSS 仍高并不一定是泄漏。本文从大容量底层数组被放回池、GC 回收节奏和运行时向系统归还内存三个层面复现问题,给出容量上限与 pprof 验证方法。307 收藏 -
用 runtime/trace.NewTask 给跨 goroutine 的业务操作建立可追踪边界,说明 context.Context 如何传播任务、task.End 如何收口,以及 trace.WithRegion 与 go tool trace 的分工。307 收藏 -
普通 []byte(s) 转换得到可写字节切片,修改它不会回写原 string;中文按字符修改应使用 []rune,结果再按需转回 string。307 收藏 -
Golang · Go问答 | 3星期前 | go · Go File.WriteAt 并发写 Go 文件分片写入 Go os.File 并发安全 Go WriterAt 不重叠区间 Go O_APPEND WriteAt
Go 的 os.File 可以被多个 goroutine 并发调用,但 File.WriteAt 是否安全取决于写入区间、打开模式、缓冲区生命周期和错误处理。本文用分片写入示例说明可行边界。307 收藏 -
Go HTTP 客户端请求成功后,Response.Body 需要正确读取和关闭,否则 Transport 可能无法复用 keep-alive 连接。本文用代码和排查表说明未关闭、未读完、提前返回及 Client 复用的处理边界。307 收藏 -
Go os.ReadDir 的排序不是文件系统偶然表现,而是包级函数明确提供的稳定契约。本文拆解源码并对比 os.File.ReadDir 的目录顺序,帮助你选对读取方式。307 收藏 -
Go 的 Header.Get 找不到请求头和找到空值时都可能返回空字符串。本文用 Header.Set、Header.Get、Header.Values 和 CanonicalMIMEHeaderKey 拆开这个边界,给出缺失判断、重复值读取与大小写处理的可运行写法。306 收藏 -
通过 LookupHost 的独立 context 和 Resolver.Dial 的 Dialer 超时,分层限制 Go DNS 解析总时限与单次连接等待。306 收藏 -
strings.Cut 把字符串拆分成 before、after 和 found 三个结果,适合处理带前缀的配置、路由和协议字段。本文用可运行示例说明空字符串边界、与 HasPrefix 的分工,以及从 Index 写法迁移时的验收方式。305 收藏 -
Go 1.27 为 net/http.Server 增加 MaxHeaderValueCount。本文从单个请求头的多值限制讲起,说明默认行为、拒绝路径、代理链回归和兼容检查。305 收藏 -
context.WithoutCancel 会保留父级值访问,却主动切断 Deadline、Done、Err 和 Cause。本文用最小示例说明原因,并给出后台任务重新建立独立超时的写法。305 收藏 -
遍历结构体切片时,range 值变量会复制每个元素。本文用最小示例说明复制边界,并给出索引访问、取地址和基准测试的选择方法。305 收藏 -
Golang · Go问答 | 2个月前 | goroutine · Context · Go问答 · goroutine泄漏 context.WithTimeout Go问答 CancelFunc Go context取消 Go服务超时
Go 服务已经返回超时,但后台 goroutine 仍在消耗连接和内存,往往不是超时参数太小,而是取消信号没有沿调用链传递或 CancelFunc 没有及时调用。本文给出从症状判断、代码修复到告警复盘的排查清单。304 收藏