Go问答技术文章
-
io.Pipe 用同步内存管道连接 Reader 和 Writer。写端 CloseWithError 会把错误传给后续读取,nil 则得到 EOF;本文用一个小实验拆开写入、读取消费、错误关闭和重复关闭的边界。486 收藏 -
Go 使用 os.OpenFile 创建文件时,传入的 perm 不是最终权限。本文拆解 umask、文件是否已存在以及 Chmod 的关系,并给出一套可复用的排查与修正写法。486 收藏 -
用 Go testing/fstest.TestFS 检查自定义 fs.FS 的路径、目录枚举和期望文件,按错误信号定位实现边界并补上回归测试。486 收藏 -
Go 的 csv.Reader 默认拒绝字段内裸双引号。开启 LazyQuotes 后,非引号字段可包含双引号,引号字段也可出现非成对双引号,但逗号、换行和字段数规则仍然生效。486 收藏 -
区分系统信任扩展与私有证书池,展示PEM加载、RootCAs及专用HTTP客户端绑定,定位主机名、证书链、有效期和容器环境导致的TLS失败。486 收藏 -
Go slog 适合把请求 ID、用户标识和耗时统一写入结构化日志。本文从 HTTP 请求场景出发,给出 context 传递、Handler 过滤和字段命名的最小写法,并说明哪些信息不应直接写入日志。485 收藏 -
Go 的 json.Decoder 开启 DisallowUnknownFields 后,客户端多传字段会变成解码错误。本文用配置接口示例说明严格校验的适用边界、兼容新增字段的处理方式、错误定位和测试清单。485 收藏 -
用 Go 标准库 log/slog 的 Handler.WithGroup 组织请求、用户和数据库字段,比较文本与 JSON 输出,并验证自定义 Handler 的实现边界。485 收藏 -
Go defer 会不会覆盖显式 return,关键不在 return 写没写值,而在 defer 是否能访问函数的命名结果参数。本文用执行顺序、闭包捕获和 defer 参数求值三个角度拆开这个常见误区。485 收藏 -
Go 的方法值 x.M 在创建时就会保存接收者,后续调用不会自动读取变量的新值。本文用值接收者、指针接收者和回调场景说明副本边界,并给出排查与修复清单。485 收藏 -
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 收藏 -
Go 1.24 起可以用 os.Root 把文件操作限制在指定目录树内。本文用 Root.Remove 删除根目录内文件和空目录,并说明相对路径、越界路径、非空目录与 Root 生命周期的错误边界。485 收藏