Go问答技术文章
-
sync.WaitGroup 不能在首次使用后复制,因为复制会把计数器、等待者状态和信号量拆成两份。本文用错误示例说明 Wait 提前返回或一直等待的原因,并给出指针传递、go vet 检查和代码审查清单。124 收藏 -
Go fuzz 测试一直产生新输入时,先区分覆盖率探索与输入域失控,再用 seed corpus、长度格式约束和固定 fuzz 预算缩小空间,让失败样本更快复现。124 收藏 -
Go 没有直接限制 embedding 层级的语法。想控制外层 API,应把匿名嵌入改为命名字段并用包装方法转发;窄接口只能限制调用方的静态视图,遮蔽也不会删除底层成员。124 收藏 -
Go HTTP 超时不一定发生在服务端处理阶段,本文用错误链、Client/Transport 参数和 httptrace 阶段日志,定位 DNS、建连、TLS、响应头或响应体读取层。124 收藏 -
exec.Cmd.Cancel 定义 Context 结束时如何通知子进程停止,WaitDelay 则限制取消后的退出等待和进程退出后的管道收尾时间。本文用两个最小实验讲清组合方式、错误判断与常见误区。124 收藏 -
Golang · Go问答 | 1天前 | CGO · 内存管理 · Go问答 · Go CGO unsafe.Pointer 指针传递 runtime/cgo.Handle runtime.Pinner
Go cgo 传指针最重要的不是指针类型,而是内存由谁分配、是否包含 Go 指针以及 C 是否会在调用返回后保存它。本文按临时借用、C 堆复制、runtime.Pinner 和 runtime/cgo.Handle 说明安全边界。124 收藏 -
解释 Go iter.Pull2 如何把 iter.Seq2 转成逐项拉取的 next 与 stop,重点验证提前停止时为什么必须调用 stop,以及双值序列结束后的边界行为。123 收藏 -
Go context.WithValue 不要直接使用 string 或 int 作为跨包 key。本文用包内私有 key 类型和类型安全访问器,解决值碰撞、嵌套覆盖与类型断言分散的问题。123 收藏 -
zip.File.Open 返回解压后的逻辑内容并通过 io.ReadCloser 管理读取资源;OpenRaw 返回 ZIP 中未经解压的压缩载荷。本文以解析失败场景拆解两者差异,给出业务读取、内容哈希和 Writer.Copy 原样迁移的正确选择。123 收藏 -
Golang · Go问答 | 3天前 | HTTP服务 · Go问答 · Go net/http 连接生命周期 StateHijacked StateClosed http.Server.ConnState 会话资源
用 Go 的 http.Server.ConnState 管理连接级会话资源,区分 StateIdle、StateClosed 与 StateHijacked,给出受 mutex 保护、可幂等清理的资源注册表写法,并说明 HTTP/2 与优雅停机边界。123 收藏 -
Go 服务里调用 context.WithCancel 后忘记 cancel,可能让定时器和子 goroutine 活得比请求更久。本文用一个可复现的小例子,说明 defer cancel 的正确位置、循环里的取消边界,以及如何用 goleak 和 pprof 复查。122 收藏 -
Go 编译到浏览器 WebAssembly 后,可以通过 syscall/js 调用 localStorage。关键是使用 GOOS=js GOARCH=wasm 构建,保持 Wasm 运行时脚本与编译器大版本一致,把 JavaScript 调用收口并处理存储不可用、JSON 损坏和 MIME 类型错误。122 收藏 -
用 Go log/slog 的 WithAttrs 固定请求上下文,理解属性快照、WithGroup 分组继承和重复键的输出边界,并用一个可运行示例核对结果。122 收藏 -
Go pprof 看不到热点时,先确认 CPU profile 类型和业务负载是否覆盖目标路径,再用 seconds 拉长采样窗口,最后结合 top、list、flat 和 cum 判断样本是否足够。122 收藏 -
讲清 Go 自定义 net.Resolver.Dial 的调用边界,使用同一个 net.Dialer 转发上下文、网络类型和 DNS 地址,并接入 HTTP Transport 保留请求超时与本地网络配置。122 收藏