Go语言技术文章
-
Go crypto/ecdh 的 PublicKey.Bytes 返回的是公钥编码副本,恢复时需要使用同一条曲线调用 Curve.NewPublicKey。本文用 P256 演示导出、传输、恢复和 Equal 对照,并解释 NIST 曲线未压缩点、X25519 长度检查及常见错误。349 收藏 -
Go Expr 的普通 Compile 会保留表达式推导出的结果类型,AsBool 则把规则结果约束为 bool。本文用同一组规则说明编译期检查、Run 返回值和动态环境的边界。348 收藏 -
为 Go 接口时间建立独立 JSON 适配类型,给出 UTC 整秒字符串的双向编码完整示例,明确 null、空字符串、精度检查和错误处理,并说明字段缺失与方法递归的常见问题。348 收藏 -
区分 Go JSON SyntaxError.Offset、InputOffset 与底层读取量,使用 errors.As 提取语法错误,并说明中文输入、截断和连续解码的定位注意点。348 收藏 -
Go slices.SortStableFunc 用三态比较函数排序结构体切片,并保留比较器判定相等元素的输入顺序。通过任务优先级示例说明降序比较、多字段规则、Clone 保护原排列、严格弱序与浅复制边界。348 收藏 -
Go 中 error 是接口类型。本文解释为什么底层 *MyError 为 nil 时,返回的 error 仍可能让 err != nil 成立,并给出返回边界的修复与测试写法。348 收藏 -
Go 的 os.DirFS 可以把 fs.FS 的相对路径映射到指定目录,但它不是 chroot,也不会阻止目录内符号链接越出根目录。本文用 ReadFile、WalkDir 和 Go 1.24+ 的 os.OpenRoot 区分两种边界。348 收藏 -
Go AddDate会对不存在的目标日期进行归一化,而非自动截到月末。本文比较日历偏移、月末截断与固定时长,给出CivilDate实现,并说明账期锚点、闰年和时区边界。348 收藏 -
Go FlagSet 的 ContinueOnError 不等于静默,SetOutput 才配置诊断去向。通过独立缓冲区示例说明如何捕获输出,区分自定义 Usage、全局集合、外层日志和帮助请求,避免重复打印或丢弃错误。348 收藏 -
tar.Reader.Next 消费的通常不是目录自己的文件内容,而是当前条目未读数据和块填充,以便流位置落到下一个头部。本文解释目录、Header.Size、Typeflag、PAX/GNU 元数据和安全错误之间的关系,并给出安全遍历写法。348 收藏 -
Go x/text/collate 的 CompareString 比较的是指定语言环境下的 Unicode 排序关系,不是字符串的 UTF-8 字节序。本文用最小示例说明 locale、返回值、比较选项和排序接入方式。348 收藏 -
Go x/text/transform 的 Reset 是流状态重置,不是每个输入块的清理钩子。本文说明 pending state、ErrShortSrc、Writer.Close 与分块循环的关系,帮助你把 Reset 放到正确的逻辑流边界。348 收藏 -
Go Expr 自定义函数参数不匹配时为什么会在 Compile 阶段报错?本文用显式函数签名说明参数数量、参数类型和返回值约束的检查边界,并给出生产规则发布前的排查清单。348 收藏 -
Go go-runewidth 会把组合字符按零宽码点处理,再在 StringWidth 中结合 grapheme cluster 计算终端单元格宽度。本文说明 RuneWidth、IsCombiningWidth、StringWidth 与 Condition 的配合方式。348 收藏 -
Go 的 reflect.DeepEqual 对数字沿用 ==,所以 NaN 不等于自身;同一切片、map 或指针又可能因身份捷径返回 true。本文拆开反射语义、unsafe 位模式比较和可维护的 NaN 业务判断。348 收藏