Go语言技术文章
-
Go 中 errors.Is 返回 false,通常不是判断函数失效,而是错误链没有通过 %w 保留下来,或比较目标每次都由 errors.New 新建。本文用最小示例拆开包装、哨兵错误、自定义 Is 和 errors.Join 的边界,给出可复查的修复清单。494 收藏 -
Go 解析 key=value 配置时,strings.Cut 会在第一次分隔符处分开字符串,并通过 found 区分未找到分隔符的情况。本文从具体输入出发,处理空值、多处分隔符和错误边界。494 收藏 -
使用 os.Root 后仍遇到路径校验失败,通常是把根目录再次拼入参数,或混淆了 io/fs 路径与本地路径。本文结合 IsLocal、Localize 和 Root.Open 梳理可直接落地的相对路径规则与排错方法。494 收藏 -
Go 的 string 按字节存储,直接切片可能把多字节 UTF-8 字符截在中间,产生非法编码。本文用可复现代码说明原因,并给出按 rune 截取与按合法字节边界截取的选择方法。494 收藏 -
读取 EUC-KR 或 CP949 保存的旧韩文文本时,不能直接把原始字节转换成 UTF-8 字符串。本文用 golang.org/x/text/encoding/korean 的 EUCKR 解码器接入 transform.Reader,给出整文件读取、流式复制、错误处理和内存取舍。493 收藏 -
fmt.Sscanf 适合解析结构稳定的字符串:用格式模板约束字段位置,用指针接收值,再同时检查扫描数量和 error。普通动词会按扫描规则处理空白,%c 则直接读取下一个字符。493 收藏 -
Go time.Ticker 停止后循环仍不退出,关键在于 Stop 不关闭 C。用 context 取消、defer Stop 和完成通道划分职责,并说明 Go 1.23 回收语义及回调阻塞边界。493 收藏 -
请求结束后仍要完成异步任务时,先用 context.WithoutCancel 脱离请求取消,再用 context.WithTimeout 设置独立期限;本文同时说明值传递、取消边界和常见误区。493 收藏 -
Go 1.27 的 encoding/json/v2 可用 StringifyNumbers 把数字编码为 JSON 字符串。本文对比调用级选项与字段级 string 标签,给出旧客户端兼容、严格解码、精度测试和灰度退出方案。493 收藏 -
用 Go runtime/trace 的 Flight Recorder 保留延迟尖峰前的有限执行轨迹,配置 MinAge、MaxBytes,并在阈值触发时安全写出快照。493 收藏 -
Go errors.Join 可以把多个校验错误合并成一个返回值,同时保留 errors.Is 和 errors.As 的判断能力。本文从一个批量配置校验器出发,说明 nil 过滤、哨兵错误、自定义错误类型和错误展示之间的边界。492 收藏 -
Go x/text/width 提供的是 Unicode 宽度属性分类,不是字体渲染后的屏幕像素测量。本文区分 width.Kind、rune、UTF-8 字节数和布局引擎,并给出按目标选择 API 的排查方法。492 收藏 -
Go 1.27 的 go fix atomictypes 可以把 sync/atomic 原始函数迁移为强类型原子包装器。本文从预览命令、访问边界、版本前提和人工复查说明这项现代化应该怎样安全落地。492 收藏 -
Go 用 os.OpenFile 创建文件时,perm 只是 Unix 上 umask 处理前的请求值;本文区分新旧文件、O_TRUNC 与跨平台权限语义,帮助定位不同机器上的权限差异。492 收藏 -
通过 money 模块与 order 服务的小项目,演示如何拆分 Go 内部模块、用 go.work 本地联调、为子目录模块创建语义化版本标签,并用 v1 兼容规则与 /v2 路径维护清晰依赖边界。492 收藏