Go问答技术文章
-
Decoder 不负责关闭底层 Reader。通过文件与响应体的所有权、单文件函数和长期引用,区分句柄泄漏、缓冲保留与业务结果增长,并给出读取示例和指标比较方法。126 收藏 -
连续调用 slices.Delete 时不要继续照搬旧下标。本文用反向删除和区间合并两种方案处理索引偏移,并说明边界检查、排序与容量复用的注意点。126 收藏 -
Go scanner.Scanner 本身没有 Filename 字段,词法错误中的文件名来自 Scanner.Init 使用的 token.File。本文说明如何用 FileSet.AddFile 设置逻辑源文件名,并通过 ErrorHandler 或 ErrorList 输出带文件名、行号和列号的诊断。126 收藏 -
Go net/http.Header.WriteSubset 可以按排除表把请求头写成线格式,但排除键不会自动规范化。本文用一个转发场景讲清 Header map、排除表、Request.Host 与写出错误的边界。125 收藏 -
Go RWMutex 并不是让新读者无限插队:写者一旦等待,新的 RLock 会被挡住。写锁仍然长期等待时,优先检查已经持有的读锁、RUnlock 配对、递归读锁、其他写者排队和写临界区长度。125 收藏 -
Go mod tidy 删除依赖后构建失败,通常是源码依赖图与实际构建输入不一致。本文从 tidy 差异、导入路径、生成代码、vendor、workspace 和 CI 入口逐层定位并给出可复查的修复方案。125 收藏 -
Golang · Go问答 | 2星期前 | 标准库 · 错误处理 · go · 并发控制 · Go context cause 取消原因 WithCancelCause CancelCauseFunc
Go 1.20 起可以用 context.WithCancelCause 保存具体取消原因,再用 context.Cause 读取;本文区分 ctx.Err 的通用状态与 Cause 的诊断信息,并说明父子 context 的首次取消、nil cause 和超时 cause 边界。125 收藏 -
httputil.ReverseProxy 的 ErrorHandler 专门接管后端请求失败和 ModifyResponse 返回的错误。本文说明默认 502 的触发范围,给出可脱敏记录请求上下文、区分取消与上游不可达的自定义处理器,并说明响应已写出和 body 复制失败时的边界。125 收藏 -
Golang · Go问答 | 4星期前 | CGO · 内存管理 · Go问答 · Go CGO unsafe.Pointer 指针传递 runtime/cgo.Handle runtime.Pinner
Go cgo 传指针最重要的不是指针类型,而是内存由谁分配、是否包含 Go 指针以及 C 是否会在调用返回后保存它。本文按临时借用、C 堆复制、runtime.Pinner 和 runtime/cgo.Handle 说明安全边界。124 收藏 -
Go t.Parallel 本身不是随机失败的根因,真正危险的是并行测试共享了会变化的进程级状态。本文从生命周期、共享资产和隔离策略入手,给出可重复排查清单。124 收藏 -
Go test -run 匹配的是测试名称而非文件名。通过包范围、正则锚点和子测试层级解释未执行现象,并区分缓存、跳过、未匹配与构建失败,给出准确命令及独立示例。124 收藏 -
Go 的 fs.ValidPath 只检查 fs.FS 路径名是否符合 slash-separated、unrooted 规则,不负责判断文件是否存在。本文用具体输入边界解释点号、斜杠、反斜杠和冒号,并给出放在 FS 调用入口的检查写法。124 收藏 -
解释 Go slog JSONHandler 的 JSON 字段顺序为何不能当作契约,并给出按键解析、稳定测试和固定文本格式化方案。124 收藏 -
Go x/text/runes 处理的是 UTF-8 文本中的 rune,不是可以直接按字节下标切开的字符。本文从 Remove、Map、If 和 transform.String 的关系出发,说明字节索引、分块读取与非法 UTF-8 的边界。124 收藏 -
Go io.NewOffsetWriter 会把逻辑写入偏移映射到 WriterAt 的指定起点,但它不自动限制区间长度。本文用最小示例说明 Write、WriteAt、Seek 的偏移关系,以及如何补上长度检查。124 收藏