Go语言技术文章
-
io.Pipe 用同步内存管道连接 Reader 和 Writer。写端 CloseWithError 会把错误传给后续读取,nil 则得到 EOF;本文用一个小实验拆开写入、读取消费、错误关闭和重复关闭的边界。486 收藏 -
Go 使用 os.OpenFile 创建文件时,传入的 perm 不是最终权限。本文拆解 umask、文件是否已存在以及 Chmod 的关系,并给出一套可复用的排查与修正写法。486 收藏 -
Go text/template 访问 .Profile.Name 失败时,先拆解点号路径和点号作用域,再区分字段、map 键、nil 值与执行错误,最后用 missingkey、with、index 稳定修复。486 收藏 -
Go slog 适合把请求 ID、用户标识和耗时统一写入结构化日志。本文从 HTTP 请求场景出发,给出 context 传递、Handler 过滤和字段命名的最小写法,并说明哪些信息不应直接写入日志。485 收藏 -
Go 的 json.Decoder 开启 DisallowUnknownFields 后,客户端多传字段会变成解码错误。本文用配置接口示例说明严格校验的适用边界、兼容新增字段的处理方式、错误定位和测试清单。485 收藏 -
用 Go 标准库 log/slog 的 Handler.WithGroup 组织请求、用户和数据库字段,比较文本与 JSON 输出,并验证自定义 Handler 的实现边界。485 收藏 -
用 Go 的 io.Pipe 把压缩器输出和 HTTP 请求串成一条流,说明读写端协作、错误传递、请求结束和可复查验证的关键边界。485 收藏 -
Go 读取邮件时,mail.ReadMessage 负责拆分邮件头,中文 Subject 用 mime.WordDecoder.DecodeHeader 解码,中文 From 则用带 WordDecoder 的 AddressParser 解析;遇到 GBK 等字符集时再补 CharsetReader。485 收藏 -
Go 处理跨夏令时的日期范围时,不要把一天硬编码成 24 小时。本文用 time.Location 绑定 IANA 时区,以左闭右开方式构造本地日期边界,并说明 AddDate 与 Duration 的使用区别。485 收藏 -
Go defer 会不会覆盖显式 return,关键不在 return 写没写值,而在 defer 是否能访问函数的命名结果参数。本文用执行顺序、闭包捕获和 defer 参数求值三个角度拆开这个常见误区。485 收藏 -
用 time.ParseDuration 解析带单位的毫秒和秒输入,再通过范围校验保护超时、重试和定时器配置,避免裸数字和单位误解。485 收藏 -
Go 的方法值 x.M 在创建时就会保存接收者,后续调用不会自动读取变量的新值。本文用值接收者、指针接收者和回调场景说明副本边界,并给出排查与修复清单。485 收藏 -
Go 在 riscv64 上出现结构体复制后 []byte 内容异常,通常不是切片共享导致,而是编译器优化写回错误。本文用 issue #80127 的复现现象拆开判断边界,并给出 CI 对照与升级检查清单。484 收藏 -
解释 Go interface 装入 nil 指针后仍不等于 nil 的原因,拆开动态类型和值的比较规则,并给出 error 返回、类型断言与反射边界的实用处理方式。484 收藏 -
Go 动态拼接正则表达式时,先用 regexp.QuoteMeta 转义用户输入,才能让点号、括号、加号等字符按字面匹配;本文同时说明模式结构、Compile 错误和替换模板的边界。484 收藏