Go语言技术文章
-
text/scanner.Scanner 默认会把制表符和换行当作空白跳过。本文用 Whitespace 位图取消这两个字符的跳过行为,再在 Scan 循环中把它们作为独立 rune 处理,说明 TokenText、Position 和字符范围的边界。421 收藏 -
说明 Go bufio.Reader.ReadRune 遇到非法 UTF-8 时 RuneError、size=1 与 err=nil 的关系,并给出区分非法字节、合法替换字符和 EOF 的严格读取方案。421 收藏 -
strings.TrimSpace 不只处理 ASCII 空格,它按 Unicode 空白规则裁掉字符串两端字符。本文用最小实验拆开 TrimSpace、unicode.IsSpace 与 TrimFunc 的关系,并给出字段清洗时的边界做法。420 收藏 -
Go 标准库的一次性初始化函数适合封装成可并发调用的闭包,但它缓存的是一次执行结果,初始化 panic 也会被重复传播。本文用真实源码路径拆开执行、结果可见性、失败语义与重置边界。420 收藏 -
用 testing.T.Context 把测试超时信号传给后台 goroutine,并配合 Cleanup 等待资源退出,避免测试结束后仍有后台任务运行。420 收藏 -
Go 使用 bufio.Writer 写文件时,Write 可能只把数据放入内存缓冲区。本文解释 Flush、Close 与 File.Sync 的职责边界,给出正确的错误处理顺序和文件写入结束清单。420 收藏 -
Go 处理事件 JSON 时,json.RawMessage 适合保留结构可变或低频使用的 payload,先读取 kind,再按分支解码到具体结构体,避免 map[string]any 带来的类型丢失。420 收藏 -
通过 go mod why 的包级、模块级和 -vendor 查询,理解依赖路径范围,避免把解释命令误当成清理或版本选择命令。420 收藏 -
子测试调用 t.Parallel 后,直接包住它的 t.Run 就可以返回,父测试函数继续执行;子测试在 Parallel 之后的部分会暂停到父测试函数返回后再恢复,但父测试整体仍要等全部子测试完成。本文同时说明 defer、t.Cleanup 和分组等待的区别。420 收藏 -
Go Badger 可以通过 Entry.WithTTL 设置键值的有效时长,再用 Txn.SetEntry 写入。本文说明 TTL 的写法、Get 读取边界,以及过期不可读和磁盘垃圾回收之间的区别。420 收藏 -
Golang · Go问答 | 4星期前 | defer · 错误处理 · go · 返回值 · 排错 · 命名返回值 Go defer defer 修改返回值 error 包装 return 执行时机
Go defer 可以在函数真正返回前修改命名返回值,但不能把普通局部变量的修改追溯到已经准备好的返回结果。本文对比两种写法,并给出错误包装与可读性边界。420 收藏 -
Go filepath 会按照编译目标操作系统选择路径分隔符和绝对路径规则,因此 Join、Clean、IsAbs 等结果可能与开发机不同。本文区分本地文件系统路径和斜杠协议路径,并给出 path、ToSlash、FromSlash、Abs 与 Rel 的使用边界。420 收藏 -
解释 Go runtime/debug.SetMaxStack 的单 goroutine 栈上限、旧值返回、只限制未来增长的语义,并区分堆内存、GC 和线程数治理边界。420 收藏 -
从定义方是否知情、目标是否属于标准库内部、是否依赖未导出契约三项信号判断 Go linkname 的迁移优先级,并给出 handshake、构建、符号和行为回归方案。420 收藏 -
ssa.NewProgram 用 FileSet 和 BuilderMode 创建空的 SSA 程序容器。本文说明初始化写法、包注册与函数体构建的区别,并比较手动入口和 ssautil 辅助函数的适用条件。420 收藏