Go问答技术文章
-
Go exec.Cmd.Cancel 默认会直接 Kill 子进程。本文用自定义取消信号配合 WaitDelay,说明如何给子进程清理机会、限制管道等待,并正确判断取消后的错误边界。418 收藏 -
说明 Go exec.Cmd.WaitDelay 的计时边界、管道继承与 StdoutPipe 调用顺序,给出超时和 ErrWaitDelay 的区分处理方案。433 收藏 -
本文解释 Go EvalSymlinks 为何要求路径组件真实存在,并给出现有路径、断链与待创建目标的正确处理方式。223 收藏 -
Go os.ReadDir 的排序不是文件系统偶然表现,而是包级函数明确提供的稳定契约。本文拆解源码并对比 os.File.ReadDir 的目录顺序,帮助你选对读取方式。307 收藏 -
在文件节点返回 fs.SkipDir 会跳过父目录剩余条目,fs.SkipAll 则停止整棵树。本文用对照表和代码说明安全选择边界。482 收藏 -
Go context.WithValue 的字符串键可能与其他包发生相等值碰撞,导致值被意外覆盖或读取。本文解释可比较键与唯一键的区别,并给出包内自定义类型、类型安全访问器和迁移排查清单。472 收藏 -
context.AfterFunc 返回的 stop 只在回调尚未启动时阻止它;取消与停止存在竞态,stop 返回 false 时回调可能已在独立 goroutine 中运行。本文给出等待完成、幂等清理和审计检查方案。259 收藏 -
Go HTTP Trailer 位于消息体之后,字段名必须在首部提交前声明,本文用服务端响应和客户端请求示例说明正确时序、分块传输条件与常见排查方法。431 收藏 -
Go HTTP 客户端遇到 307/308 时必须重新读取请求体;若 Request.GetBody 为空且 Body 非空,客户端会停在重定向响应。本文说明自动设置 GetBody 的类型、自定义文件重开方式,以及重定向目标和幂等性控制。253 收藏 -
http.Request.Clone 会深复制 URL、Header 等可复制字段,但 Body 仍是共享的 io.ReadCloser。本文按出站可重放、入站有界和大流式请求给出安全选择。182 收藏 -
strings.Builder 首次写入后会记录自身地址;按值复制会让副本携带旧地址,后续 Write 或 Grow 被 copyCheck 判定为非法复制并 panic。修复应改用单一所有者、指针传参或返回字符串。352 收藏 -
Go strconv.ParseFloat 返回 ErrRange 时,返回值通常是 ±Inf,不能直接当作普通业务数值使用。本文用示例说明 ErrRange、ErrSyntax、bitSize 与有限值校验的处理边界。145 收藏 -
Go 1.21 及以上的新代码通常优先用 slices.SortStableFunc;旧版本兼容或强依赖索引比较器时可保留 sort.SliceStable。本文对照两种比较器契约、迁移风险与稳定性断言。436 收藏 -
runtime.GoroutineProfile 的记录数会随 goroutine 创建和退出而变化。本文比较一次分配、带余量的有界重试和 runtime/pprof,给出容量上限、重试上限、records[:n] 截断与失败处理写法。354 收藏 -
Go 1.24 引入 runtime.AddCleanup 后,AddCleanup 与 SetFinalizer 的对象约束、执行顺序、循环引用和取消方式都不同。本文用资源清理场景给出选择和迁移清单。210 收藏