Go语言技术文章
-
Go 1.25 起可以用 os.Root.MkdirAll 在受限目录树内创建多级目录。本文说明 OpenRoot、相对路径、FileMode 权限参数、重复创建和迁移边界。215 收藏 -
Go time.Time.Truncate 按绝对时间取整,半小时偏移的时区可能仍显示本地 :30。本文用最小示例区分固定时长边界与本地日历边界,并给出保留 Location 的 time.Date 重建方案。215 收藏 -
Go x/text/search 的 Pattern 适合把语言相关的查找规则编译一次后反复使用。本文从 CompileString 和 IndexString 入手,说明字节范围、未命中结果、Anchor、Backwards 以及并发复用时的边界。215 收藏 -
Go go-message/mail 读取邮件时,可以通过 Part.Header 的具体类型区分正文内联部分和独立附件。本文结合 NextPart、InlineHeader、AttachmentHeader 以及 CreateInline、CreateAttachment,说明 MIME 结构、读取生命周期和写入选择。215 收藏 -
Go os.Chtimes 接收的是路径,但遇到符号链接时会沿路径找到目标文件并修改访问时间和修改时间。本文用 Stat、Lstat 和零值时间参数拆开观察层级,说明为什么链接自身的 ModTime 不会随调用变化。215 收藏 -
Go time.Time 的单调读数会影响比较与相减,== 还比较 Location 和完整表示。本文用 JSON 往返与时间索引示例,区分 Equal、进程内计时和 UTC 规范化键,并解释精度丢失的排查方法。215 收藏 -
Go net/http.Client 减少临时分配的关键不是盲目复用所有对象,而是复用 Client 和 Transport、缩短编码缓冲生命周期、正确关闭响应体,并用 benchmem 确认收益。215 收藏 -
泛型 Named 实例的 Obj 与 Origin().Obj 返回同一声明对象。通过构造示例说明声明名字、原始类型和实例实参应怎样分别读取与保存。215 收藏 -
Go同一信号注册多个channel时,如何区分独立订阅与竞争接收,安排缓冲、消费和Stop,并选择适合整组退出的取消状态。215 收藏 -
Go 的 exec.CommandContext 默认只取消 Cmd 对应的直接进程,不会自动递归终止它派生的所有后代。本文区分 Cancel、Wait、WaitDelay 和进程组策略,解释为什么主命令退出后子进程仍可能存在。215 收藏 -
Go 查询接口的可选参数不宜隐藏在 Context 中。通过显式 Options、默认值校验和类型化追踪标识入口,划清业务输入、请求元数据与取消传播的职责边界。214 收藏 -
给 Go 结构体实现 MarshalJSON 后,如果方法内部再次对原类型调用 json.Marshal,就会重新命中同一个方法并形成递归。本文用别名类型隔离方法集,再通过匿名结构体合并默认字段与自定义字段,并说明指针接收者、错误返回和字段覆盖的边界。214 收藏 -
表驱动测试加上 t.Parallel 后,真正需要解决的是每个子测试的数据边界。本文从 t.Run、循环变量、局部副本和 Cleanup 的生命周期说明如何避免并行子测试互相污染。214 收藏 -
Go 模糊测试不是输入越大越好。本文用 testing.F 的 seed、前置过滤和 go test 运行参数,把输入长度、无效样本、最小化时间与总运行时间放进一套可控预算。214 收藏 -
Go json.Unmarshal 解码时间字段时报错,先区分时间格式不符合 RFC3339 还是 JSON 类型与结构体字段不匹配,再决定保留 time.Time、增加自定义 UnmarshalJSON,或使用中间结构完成外部格式适配。214 收藏