Go语言技术文章
-
Go 中两个 error 的 Error 文本相同,接口值仍可能不相等。本文解释动态类型和值的比较规则,并用 sentinel、errors.Is、errors.As 给出稳定的错误判断方式。461 收藏 -
处理用户提供的文件名时,filepath.Join 加 os.Open 可能被 .. 或符号链接带出指定目录。本文用 Go 1.24 的 os.Root 与 os.OpenInRoot 拆开安全打开、错误判断、资源关闭和平台边界,给出可复查的小示例。460 收藏 -
os.File.Sync 会把文件系统缓存中的当前内容提交到稳定存储,但它不是事务提交,也不能替应用目录的重命名与目录同步。本文用 Write、Sync、Close 的错误处理顺序拆开落盘边界。460 收藏 -
Go 1.27 引入实验性的 simd 与 archsimd 后,部分 ARM64 板卡运行测试会触发 SIGILL。本文结合 RK3588 问题说明非法指令的来源、硬件能力边界与安全排查方式。460 收藏 -
Go 1.22 扩展了 net/http ServeMux 的方法和通配符模式。本文用一张资源路由表说明如何组合 GET、POST、DELETE,判断模式覆盖关系,避免注册期冲突,并处理 PathValue、尾斜杠和旧版本兼容边界。460 收藏 -
Go 普通 map 遇到并发读写时可能触发 fatal error。本文从访问边界、锁方案、sync.Map 和 channel 所有权对比入手,给出排查与修复清单。460 收藏 -
filepath.WalkDir 的错误不只来自文件本身。本文按根路径、目录读取和子项回调三类入口,讲清 d 为 nil、SkipDir 与 SkipAll 的处理边界。460 收藏 -
Go trace 的 scheduler latency 与 CPU profile 统计对象不同。本文用同一段负载采集两份画像,解释如何区分调度排队、CPU 热点和阻塞等待,并给出复采检查清单。460 收藏 -
从闭包变量绑定、Go 版本语义和 Timer 生命周期三个方向,排查循环创建 Go 定时回调时业务标识错位,并给出可落地的修复与回归清单。460 收藏 -
讲清 Go 1.27 泛型方法为什么不能直接满足接口,并比较非泛型桥接、参数化接口与顶层泛型函数三种兼容设计。460 收藏 -
Go 接收外部 JSON 后,先规范化再一次收集字段错误,能让接口边界更稳定。本文用标准库重组一套可复用的输入处理方式,并说明什么时候值得生成 JSON Schema。460 收藏 -
从一个需要同时排序整数、字符串和业务结构体的场景出发,拆解 Go 泛型约束、比较器和类型集合的组合方式,给出可编译的最小实现、边界判断与测试方法。459 收藏 -
Go 1.27 的 URL.Clone 会深拷贝 URL 字段,但 URL 本身保存的是 RawQuery 字符串;真正的 map[string][]string 需要用 Values.Clone 隔离。本文拆开两层边界,给出改参、写回和复查方法。459 收藏 -
用 encoding/binary 按协议选择 BigEndian 或 LittleEndian,正确读写固定宽度整数,区分结构体布局、切片边界和 Uvarint 变长编码。459 收藏 -
Go time.ParseDuration 解析小时分钟混合值失败,通常不是小时和分钟不能组合,而是输入使用了 min、中文单位或内部空格。本文说明合法格式、错误边界与外部输入处理方式。459 收藏