Go问答技术文章
-
Go 的 io.Reader 可以在一次 Read 中同时返回 n > 0 和 io.EOF。正确顺序是先处理 buf[:n],再判断 err;否则会丢掉输入流最后一段有效数据。本文给出通用循环、错误优先级、0,nil 边界与标准库替代方案。330 收藏 -
filepath.Clean 只处理路径字符串,不解析软链接、权限和真实文件系统状态。本文按路径生命周期解释 os.Root 仍会拒绝访问的原因,并给出可移植的校验与错误处理写法。329 收藏 -
Go 1.24 为 crypto/x509 增加证书策略验证后,证书链能建立并不代表满足指定策略 OID。本文从版本、Policies 字段、CertificatePolicies、策略图和中间证书集合五个方面定位失败原因。329 收藏 -
Go 业务超时应优先使用 time.Now 保留的单调时间语义,日志和跨服务协议则使用墙上时间或剩余 Duration。本文拆解校时影响、API 选择、序列化边界和 RPC deadline 的决策方法。328 收藏 -
Go HTTP 客户端已复用 Client 与 Transport,连接数仍上涨时,应检查 Response.Body 是否读到 EOF 并关闭。本文给出小响应体、错误状态码和大响应体的处理策略,并说明 HTTP/1.x 连接复用的边界。326 收藏 -
RWMutex 不会天然比 Mutex 快。本文用并发配置缓存说明读写锁的临界区边界、待写者阻塞新读者、不可升级降级等语义,并给出可调整读写比例的基准模板,帮助你按真实竞争场景做选择。325 收藏 -
Go 的 Rows.Next 返回 false 既可能是正常读完,也可能是遍历途中出错。本文说明 Rows.Err、Scan 和 Close 各自负责什么,并给出完整查询模板。324 收藏 -
Golang · Go问答 | 6天前 | 标准库 · 错误处理 · IO · Go问答 · 版本迁移 · Go io.Reader io.EOF io.ReadAll ErrUnexpectedEOF ioutil.ReadAll
io.ReadAll 的任务就是一直读取到 EOF,因此 EOF 表示任务正常完成,成功时返回已读字节和 nil;只有非 EOF 错误才会作为错误返回,且错误发生前已读取的数据仍会保留。318 收藏 -
Go errors.Is 已经负责沿 Unwrap 展开错误树,自定义 Is 只应判断当前节点。本文用原创示例说明递归调用 Unwrap 的重复遍历、语义越界和循环风险,并给出可复用的错误类型写法。316 收藏 -
Go 模糊测试只覆盖少量路径时,先拆分种子输入边界,再检查 fuzz target 的可达性、确定性和运行指标,逐步提升语料质量。313 收藏 -
Go execution trace 看不到自定义任务区域,通常与采集窗口、Task 与 Region 的边界、Context 传递或查看范围有关。本文按四个检查点定位原因,并给出可复用的 runtime/trace 写法。312 收藏 -
Go errors.Join 会生成实现 Unwrap() []error 的多分支错误树。errors.Is 会检查根错误并深度优先遍历每个子错误,因此可对多个原因逐个匹配;直接等号和 errors.Unwrap 不适用于该结构。309 收藏 -
Go os.ReadDir 的排序不是文件系统偶然表现,而是包级函数明确提供的稳定契约。本文拆解源码并对比 os.File.ReadDir 的目录顺序,帮助你选对读取方式。307 收藏 -
Go os.Root 会跟随根目录内的软链接,但每次打开仍会校验最终目标是否留在边界内。本文用三类链接、错误分类与安全代码解释为什么边界错误是预期防护。306 收藏 -
Golang · Go问答 | 6天前 | Context · 超时控制 · net/http · Go问答 · Go HTTP超时 context.WithTimeout http.Client.Timeout
Go 的 http.Client.Timeout 是同一客户端所有请求共享的总时限兜底,请求 Context 则是单次调用可继承、可手动取消的业务预算。两者都能覆盖连接到响应体读取的完整生命周期,同时配置时更早的截止时间生效。304 收藏