Go语言技术文章
-
Go 的 math/big.Int 表示整数,调用 Quo 时会按整数除法截断,因此 5 除以 2 得到 2。需要保留小数时,应把输入放进 big.Rat,再用 Quo、RatString 或 FloatString 输出。本文同时说明 QuoRem、IsInt、除数为零和负数边界。384 收藏 -
testing.T.Setenv 不是通用资源释放器,它通过 Cleanup 在测试结束后恢复环境变量。本文按生命周期、并行限制和直接 os.Setenv 三条线排查“没有释放”的错觉,并给出文件、连接和 goroutine 的独立清理写法。384 收藏 -
Go 的 sync.RWMutex 在等待写者时会暂时挡住后续 RLock。本文从锁等待、临界区长度、递归读锁和快照设计入手,给出读请求堆积的排查与处理方案。383 收藏 -
maps.Equal 适合比较值可比较的 map;遇到切片或嵌套 map,要用 EqualFunc 把值比较规则交给 slices.Equal 或递归的 maps.Equal。本文整理类型约束、nil 边界和 NaN 键等容易误判的情况。383 收藏 -
Go 1.27 的 encoding/json/v2 默认拒绝 JSON 对象中的重复成员名。本文解释拒绝原因、严格解码写法,以及兼容历史数据时如何显式开启 AllowDuplicateNames。383 收藏 -
Go testing.T.FailNow 只能由运行测试函数的 goroutine 调用。本文解释 FailNow、Fail 和 Fatal 的停止语义,说明子 goroutine 误用为何导致误通过或清理失控,并给出错误回传、取消和等待 worker 的安全组织方式。383 收藏 -
Go errors.Is 默认按错误值和包装链判断匹配;当业务错误需要对外表现为某个哨兵错误时,可以实现 Is(error) bool 做稳定的浅层匹配。本文说明实现方式、包装链行为和常见边界。383 收藏 -
Go cgo 报 pkg-config 找不到系统库时,先区分工具、.pc 元数据、头文件和链接器问题,再用 PKG_CONFIG_PATH、模块名与构建环境逐层排查。383 收藏 -
用组合字符昵称场景讲解Go uniseg字素簇遍历,通过Next、Str和Positions保留完整组合序列,并实现前缀截取,区分字节、rune、宽度与规范化。383 收藏 -
GoLLRB 的遍历方法不是简单地把升序改成降序:AscendGreaterOrEqual 包含 pivot,AscendLessThan 排除 pivot,AscendRange 使用大于等于下界且小于上界的闭开区间,DescendLessOrEqual 则按降序包含 pivot。本文用一组可复用的判断表说明边界和回调停止语义。383 收藏 -
使用 Go hash/crc32 在分块读取文件、上传内容或消息流时持续计算 CRC32,掌握 Sum32、Sum 和 Reset 的用法与边界。383 收藏 -
本文用 Go slices.Compact 压缩连续重复元素,说明它怎样保留原切片顺序、原地复用底层数组、处理尾部元素,以及什么时候应改用 CompactFunc。383 收藏 -
Golang · Go问答 | 1星期前 | go · 垃圾回收 · 资源管理 · 运行时 · 排错 · Go 垃圾回收 资源清理 runtime.AddCleanup runtime.KeepAlive runtime.Cleanup.Stop
Go Cleanup.Stop 对已经因对象不可达而排队的清理函数不会生效。本文从取消窗口、对象可达性、KeepAlive 位置和闭包反向引用四个方面说明原因,并给出显式释放与兜底清理的配合写法。383 收藏 -
Golang · Go教程 | 1天前 | 字符串处理 · Go教程 · Go strings.TrimSpace net/textproto textproto.TrimString ASCII空白
说明 Go textproto.TrimString 只裁剪首尾 ASCII 空白的边界,并对比 strings.TrimSpace,帮助协议字段选择正确的清理函数。383 收藏 -
Go 中想把临时文件放到指定目录,直接把目录路径传给 os.CreateTemp 的第一个参数即可。本文说明 pattern、Name、Close、Remove 的配合,并补充需要目录级隔离时的 MkdirTemp 写法。383 收藏