Go问答技术文章
-
Go 的 File.Sync 只针对已经打开的文件描述符提交数据和文件元数据,临时文件 Rename 后的目录项仍属于父目录。本文拆分三层持久化边界,并给出 Go 的安全替换写法与平台注意事项。489 收藏 -
runtime.KeepAlive 用于让持有原生句柄的 Go 对象在指定位置前保持可达,避免 finalizer 提前关闭资源。本文给出最小写法、放置位置、适用边界与常见误区。489 收藏 -
Go errors.Join 会忽略真正 nil,全部成功返回 nil。通过可选检查示例解释混合输入、错误成员识别及带类型空指针的返回陷阱,并给出聚合错误的适用约定。489 收藏 -
iter.Pull 把 push 迭代器转换为 next 与 stop 两个函数。只要没有消费到序列末尾,就必须调用 stop;本文从提前返回、并发误用和 goroutine 观测三个方向定位残留。488 收藏 -
Go go-toml 编码后空值仍出现,先检查 toml 标签而非 json 标签。通过备注与重试次数的小型导出器,说明空字符串省略和有效零值保留的不同契约。488 收藏 -
本地能通过、CI 却提示 module checksum 缺失,通常不是 Go 随机失败,而是本地缓存掩盖了缺少的 go.sum 条目,或 CI 的只读与模块下载环境不同。本文给出复现、补齐和固定构建输入的方法。487 收藏 -
Go archive/tar 会自动处理 PAX 元数据头。读取时用 Header 获取已映射的标准字段,用 Header.PAXRecords 读取自定义扩展键,并在 Next、路径和类型转换处做好兼容处理。487 收藏 -
Go error经过%w包装后不应再依赖完整字符串判断。本文区分错误文本、哨兵错误和具体类型,给出errors.Is、errors.As及多错误包装的替代方案。487 收藏 -
Go TLS 证书验证失败时,不要先关闭校验。先按 x509 错误判断主机名是否匹配,再检查 RootCAs、中间证书和系统根证书,最后用 VerifyOptions 做独立定位。487 收藏 -
用 Go testing/fstest.TestFS 检查自定义 fs.FS 的路径、目录枚举和期望文件,按错误信号定位实现边界并补上回归测试。486 收藏 -
Go 的 csv.Reader 默认拒绝字段内裸双引号。开启 LazyQuotes 后,非引号字段可包含双引号,引号字段也可出现非成对双引号,但逗号、换行和字段数规则仍然生效。486 收藏 -
pkg.go.dev API 分页同步遇到 nextPageToken 不可继续使用时,应固定原请求参数、回到第一页并用稳定键幂等合并,避免漏数据和无限重试。485 收藏 -
Go 的 ctx.Err() 只能告诉你已取消或已超时,context.Cause(ctx) 才能携带主动取消的具体原因。本文用原创示例拆开主动取消、超时取消和父子上下文竞争时的判断方式。485 收藏 -
Colly 的 OnError 同时可能面对传输层失败、非 2xx HTTP 响应和解析回调错误。本文用 Response、StatusCode、errors.As 与 ParseHTTPErrorResponse 说明如何分类,并把判断接到日志、重试和异步收尾。485 收藏 -
Go 新循环变量语义改变了 loopclosure 诊断。区分循环声明与外部赋值变量,用显式参数绑定任务,并说明无诊断不代表闭包或共享对象并发安全。485 收藏