Go语言技术文章
-
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 收藏 -
Golang · Go教程 | 2个月前 | channel · select · Context · Go教程 · 性能排查 · select channel context default time.Ticker Go教程 CPU飙高 for select
Go 里的 select default 适合做非阻塞试探,但放进无等待的 for 循环后,代码会在没有 channel 事件时持续空转,常见表现就是 CPU 飙高、日志刷屏和退出路径混乱。459 收藏 -
从一个需要同时排序整数、字符串和业务结构体的场景出发,拆解 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 收藏 -
Go 的 <-chan 参数只能接收,不能发送或调用 close。本文解释单向通道的类型权限、关闭责任和安全的函数签名写法。459 收藏 -
Go 的 bufio.Reader.Peek 只查看缓冲区中的下一个字节窗口,不会推进读取游标,所以后续 Read 仍可能读到同样内容。本文解释缓冲区填充、消费位置、切片有效期,以及 Read、Discard 和 Peek 的正确配合。459 收藏 -
当一个 HTTP 请求体里连续放着多个 JSON 值时,json.Unmarshal 只能处理单个完整值。本文用 json.Decoder 循环读取连续 JSON,区分正常 EOF、语法错误和尾部脏数据,并给出请求体大小限制、空白字符和资源关闭的检查方法。458 收藏 -
读取数十万文件的目录时,os.ReadDir 的排序语义和一次性返回 []os.DirEntry 会同时影响内存与响应时间。本文从目录扫描小工具出发,比较 ReadDir 与 File.ReadDir 的边界,并给出保留排序、改为分批遍历和验收内存的实现方法。458 收藏 -
Golang · Go教程 | 2星期前 | sync · WaitGroup · 并发编程 · Go教程 · 工程实践 · Go 并发任务 错误传播 sync.WaitGroup.Go WaitGroup.Add
Go 1.25 新增的 sync.WaitGroup.Go 能把启动任务、计数和收尾绑定在一起,但它不负责错误返回,也不能让任务函数 panic。本文从 Add 竞态与错误传播两个现场,给出可核对的写法和验收边界。458 收藏