Go语言技术文章
-
通过 httptest.NewServer 与自定义 RoundTripper 组合,记录测试客户端请求,并稳定覆盖固定 500 响应和传输错误分支。132 收藏 -
用 Go os/signal 接收 SIGINT 和 SIGTERM,将信号接入服务生命周期,说明缓冲 channel、NotifyContext、Stop 以及重复信号和平台边界。132 收藏 -
Go compress/gzip 写入后不调用 Close,可能导致缓冲数据和 GZIP footer 没有完整写出。本文用最小示例说明 Write、Close、底层资源关闭和读取到 EOF 的排查顺序。132 收藏 -
掌握 Go sync.OnceValue 的一次初始化、并发调用与结果复用方式,了解 OnceValues、panic、可变指针和重置边界。132 收藏 -
Go 解析不带时区的日期时间文本时,time.Parse 会按 UTC 解释,time.ParseInLocation 会按传入 Location 解释。本文用对比代码说明选择方法、Zone 判断和输入边界。132 收藏 -
Go 的 os.CreateTemp 固定按 0600(受 umask 影响前)创建临时文件,因此权限比 0644 严格通常是正常语义。本文按触发信号、实际模式、受控 Chmod、回滚和跨进程排查说明怎样处理。132 收藏 -
Go 的 time.Ticker 退出时不能只停业务循环,还要明确 Stop、ticker.C 和消费协程的生命周期。本文用一个可复用的退出模式说明如何停止 ticker、等待 goroutine 并避免通道误用。132 收藏 -
Go strings.FieldsSeq 在 Go 1.24 中提供按需遍历空白分隔字段的方式,结果是 iter.Seq[string],不必先创建完整的 []string。本文说明它与 strings.Fields 的边界、提前停止写法和旧版本兼容策略。132 收藏 -
Go 1.27 的实验性 SIMD API 分成可移植的 simd 与架构相关的 simd/archsimd。本文结合 Float32s、Float32x4、ToArch 和 FromArch,说明两层 API 的能力边界、构建开关、转换方式和公共接口风险。132 收藏 -
Go 的工具链版本不能直接按普通字符串比较。本文用 go/version.Compare 判断 go1.27、go1.27rc1 和 go1.27.0 的先后,并说明 go 前缀、非法输入、Lang 归一化和最低版本检查的边界。132 收藏 -
Go benchmark 第一次结果偏慢时,先区分测试框架的首轮校准、被测函数的 lazy init 和环境噪声,再决定是否预热。本文用 b.Loop、StopTimer、ResetTimer 以及 -benchtime、-count 组合,建立可解释的 cold path 与 warm path 测量方式。132 收藏 -
JSON Patch 的 test 是前置条件检查,不是数据库事务。本文说明 test 失败时为什么应丢弃 Apply 结果、保留原文档,并用事务或乐观锁把检查、变更和持久化收口为一次可提交的更新。132 收藏 -
Go defer 属于所在函数,循环结束不会触发延迟关闭。本文以批量文件读取解释资源积累原因,给出单文件助手函数与错误合并写法,并说明作用域、闭包和退出方式的区别。132 收藏 -
Go 1.27 为 go/scanner.Scanner 增加 End 方法,返回最近一次扫描 token 之后的位置。本文从诊断范围偏移的排查现场出发,说明 Scan 返回的起点、End 的末端、token.File.Offset 的字节区间如何配合,以及 EOF、Unicode 和未扫描状态下的边界。131 收藏 -
使用 Go archive/zip 的 FileHeader.Modified 和 Writer.CreateHeader 设置 ZIP 条目的修改时间,并处理 UTC 转换与传统 ZIP 时间精度差异。131 收藏