Go问答技术文章
-
从 Go string 与 C char 指针的表示差异出发,说明 C.CString、C.GoString、C.GoStringN 的选择、C.free 的释放责任,以及异步保存指针时的生命周期边界。432 收藏 -
解释 Go http.Request.GetBody 的生成条件,区分可重读请求与流式请求,并给出重试、内存控制和上传场景的检查方法。431 收藏 -
Go 结构体含 sync.Mutex 时,值接收者、参数传递、range 和 map 取值都可能复制锁。本文对比指针语义、快照边界与 go vet copylocks 的审查方法。431 收藏 -
Go sql.DB.BeginTx 会用传入的 context 管理整个事务生命周期。上下文取消后 database/sql 会回滚事务,Commit 返回错误。本文区分事务上下文、语句上下文与安全收尾写法。431 收藏 -
os.DirFS 只保证交给操作系统的路径带有指定前缀,根目录内的符号链接仍可能指向外部。本文用最小项目说明成因,并给出 Go 1.24+ 的 os.Root.FS 改写方案。431 收藏 -
Go HTTP Trailer 位于消息体之后,字段名必须在首部提交前声明,本文用服务端响应和客户端请求示例说明正确时序、分块传输条件与常见排查方法。431 收藏 -
http.ResponseController 把 HTTP 响应刷新和连接劫持能力统一到一组探测方法中。本文用真实 Handler 场景拆开 Flush、Hijack 与 ErrNotSupported 的调用边界,说明什么时候应当回退,以及如何验证响应状态。430 收藏 -
竞态修复后吞吐下降不一定是锁竞争。本文用 mutex profile、block profile 和固定基线,判断新增临界区是否真正造成吞吐损失。430 收藏 -
fs.Sub 不会改写原始 embed.FS,也不会修改 HTTP 路由。本文区分嵌入路径、子文件系统相对路径和 URL 前缀,解决读取与遍历时目录前缀重复的问题。430 收藏 -
Go 的 BuildInfo.Settings 是按实际构建条件写入的稀疏键值列表,VCS 字段会因关闭 buildvcs、缺少仓库或工具、模块与仓库目录不匹配等情况而缺失。本文给出判断方法与容错读取代码。430 收藏 -
Go 解析流式 JSON 时遇到 SyntaxError,Decoder.InputOffset 能告诉你解码器已经读到哪个字节,但它不是行号也不是错误字符的万能定位器。本文用带换行的请求体演示如何结合错误信息、原始字节和 Decode 循环缩小排查范围。429 收藏 -
从构建上下文、//go:build、文件后缀和 go list 文件集合入手,区分 Go 编译缓存复用、标签未命中与 cgo 外部库变化,给出可重复的排查和 CI 修复顺序。429 收藏 -
context.Err 只能告诉调用方请求已取消或超时,context.Cause 才能保留触发取消的具体原因。本文用一个可运行的 Go 示例说明 WithCancelCause、Cause 和 Err 的关系,以及父子 context 竞争取消时的边界。428 收藏 -
Golang · Go问答 | 1个月前 | 错误处理 · go · 性能 · bytes.Buffer · Go 1.26 · io.EOF 版本迁移 Go 1.26 bytes.Buffer.Peek 缓冲区预览
Go 1.26 为 bytes.Buffer 增加 Peek 方法,可以在不推进读取位置的前提下预览前 N 个字节。本文对比 Next 和 Peek 的行为,说明 io.EOF、切片有效期、旧工具链兼容与测试边界。428 收藏 -
Go 1.26 提供了实验性的 goroutineleak pprof 画像,可在构建时启用后观察疑似泄漏的 goroutine。本文从一个等待链问题切入,说明如何开启、采样、区分真实泄漏与暂时阻塞,并给出回归核对边界。428 收藏