Go问答技术文章
-
Go 1.25 引入的 os.Root.Lchown 可以在受限目录内修改符号链接自身的数字 uid/gid。本文区分 Lchown 与 Chown 的作用对象,给出错误处理和跨平台排查要点。426 收藏 -
Go 循环中直接 defer file.Close 会把关闭动作推迟到外围函数返回。本文用单文件函数隔离资源生命周期,并说明读取错误、关闭错误和文件描述符复查边界。426 收藏 -
math.Frexp返回归一化分数与二进制指数,math.Ldexp可重组这对参数。本文提供最小Go示例,解释分数区间、负数与倍率调整,并列出零、无穷和NaN的特殊约定,避免与十进制表示或原始位字段混淆。426 收藏 -
KSUID由大端时间戳和随机载荷组成,27字符Base62文本保留了固定二进制值的字典序。本文用Go示例说明文本排序、字节排序与大致生成时间的关系,并解释时钟偏差、同一时间戳和游标截断的边界。426 收藏 -
Go TLS Config.Clone 是浅克隆,修改共享切片、证书池或闭包状态仍可能引发竞态。本文给出 NextProtos 与 RootCAs 的隔离示例,说明使用后只读、回调依赖和配置切换边界。426 收藏 -
Go 的 x509 Verify 即使已加载根证书,也可能因 PEM 未解析、使用了不同 Roots、缺失中间证书或 CA 约束不成立而返回 unknown authority。本文用加载布尔值、签名关系和返回链数量逐层定位并修复。425 收藏 -
Go filepath.WalkDir 遇到权限目录时,不要直接让整个遍历失败。先判断回调 err 和 d,再用 errors.Is 识别 fs.ErrPermission,并按场景选择返回 nil、fs.SkipDir、fs.SkipAll 或原始错误。425 收藏 -
解释 log/slog ReplaceAttr 处理嵌套 Group 时 groups 与 a.Key 的边界,给出按完整路径脱敏的写法,并区分 Group、LogValuer、Any 和 Handler 配置范围。425 收藏 -
Go x/net/html/charset.DetermineEncoding 返回的 certain 不是“有没有识别出编码”,而是“结果是否来自可靠声明”。本文拆解 BOM、Content-Type、meta 扫描、UTF-8 推断与 windows-1252 回退的顺序,给出网页乱码排查时的使用方式。425 收藏 -
Go x/image/riff 的 chunkLen 只表示块数据长度;当数据长度为奇数时,RIFF 还会补一个 padding byte。因此下一个块偏移要同时考虑 8 字节头部、数据区和对齐字节。425 收藏 -
Go math/big.Int.BitLen 返回绝对值的位长度,最少无符号字节数可按 (BitLen()+7)/8 估算。本文区分零值、负数、Bytes 变长编码与 FillBytes 固定宽度编码。425 收藏 -
Go slice 截取不会复制底层数组,只保留很小的子切片时,大数组仍可能被引用。本文用字节片段示例说明原因,并给出 make+copy 与 bytes.Clone 的释放方案。424 收藏 -
Go 读取已关闭 channel 时会得到元素类型零值,但双返回值中的 ok 会变成 false。本文区分开放空通道、已关闭通道和缓冲值,说明单次接收、range 消费与关闭责任的正确约定。424 收藏 -
Go HTTP 长连接空闲后复用失败,通常不是单一的超时参数问题。本文比较客户端 Transport、服务端 keep-alive、Response.Body 和连接池复用这几个边界,给出配置与排查方法。424 收藏 -
Go crypto/tls 的 CurvePreferences 类型是 []tls.CurveID,列表顺序不会直接决定协商优先级。本文围绕 MLKEM1024 说明 nil 默认值、显式集合、GODEBUG 与客户端服务端交集的排错边界。424 收藏