Go问答技术文章
-
Scanner.Bytes 返回的是当前 token 的字节切片视图,不保证在下一次 Scan 后继续有效。本文用一个小工具复现变化原因,并比较即时处理、bytes.Clone、append 复制与 Text 的适用边界。136 收藏 -
Go 服务接入 OpenTelemetry 后,如果 Trace 仍然无法显示清晰的调用关系,通常要从 service.name、HTTP 入出站埋点、上下文传播和批量导出四个边界排查。本文给出一套原创接入思路。335 收藏 -
Go 的 os/exec.StdoutPipe 返回子进程标准输出的读取端,必须先完成管道读取再调用 Cmd.Wait。本文解释管道关闭、输出回压和等待顺序,并给出单路读取、双路消费与 Output 的选择方法。497 收藏 -
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 收藏