Go语言技术文章
-
Go 定时任务最容易被忽略的问题不是如何触发,而是上一次任务变慢后如何避免下一轮重入。本文比较 Ticker、单次触发和带状态的调度写法,并给出可验证的选型边界。434 收藏 -
Go 1.25 新增的 sync.WaitGroup.Go 把 goroutine 启动与计数绑定起来。本文用批量任务示例讲清启动时序、Wait 边界、panic 约束和异常收口方式。434 收藏 -
Go 正则表达式可以用 (?P...) 声明命名捕获组,再通过 FindStringSubmatch 和 SubexpIndex 按字段名读取结果。本文说明数字分组的错位风险、命名分组写法,以及 nil、空分组和名称不存在时的处理方式。 434 收藏 -
Go 的 int 字段不能直接接收 JSON 字符串中的数字。固定返回 "123" 时使用 json:",string",同时兼容数字和字符串时用自定义 UnmarshalJSON 配合 strconv.ParseInt,并明确空值、小数和溢出策略。434 收藏 -
Go 的 panic 沿当前 goroutine 调用栈展开,recover 只有在同一 goroutine 的 deferred 函数中直接调用才会生效。本文用原创示例说明错误位置、保护函数和 channel 传递边界。434 收藏 -
Go 的 encoding/csv 支持把引号字段中的换行保留为同一条记录。本文说明正确的 CSV 写法、csv.Reader 的读取方式、字段数配置,以及如何用 ParseError、FieldPos 和 InputOffset 定位坏数据。434 收藏 -
Go 里把 WaitGroup.Add 写进 goroutine,会让 Wait 有机会在计数建立前先返回。本文用时序拆解根因,给出 Add、Done、Wait 的安全写法,并说明嵌套任务和 WaitGroup.Go 的边界。434 收藏 -
Go sync.Once.Do 内部函数发生 panic 后不会自动重试;本文用调用计数、recover 和对比表说明 Once、OnceFunc 与显式重试状态机的边界。434 收藏 -
用 Go regexp 的命名捕获组解析日志字段,按 SubexpNames 建立索引映射到结构体,并处理匹配失败、空组和重复组名。434 收藏 -
用 Go 的 io.MultiReader 把多个 Reader 顺序拼成一个输入流,掌握 EOF、错误传播、分隔符和底层资源关闭的边界。434 收藏 -
Go encoding/xml 解码 XML 时,前缀只是文档别名。本文用 xml.Name.Space 和 Local 说明如何按命名空间 URI 稳定判断元素,并比较 Token 级解析与结构体标签的适用边界。434 收藏 -
用 Go net/textproto 读取原始 HTTP 风格请求头,掌握 ReadMIMEHeader、重复字段、续行、键名规范化和输入长度边界。434 收藏 -
Go 1.26 起标准库提供 crypto/hpke,但 KEM、KDF、AEAD 不是可以任意拼接的三个下拉框。本文从兼容性、后量子迁移、硬件环境和应用用途出发,给出 DHKEM、ML-KEM、混合 KEM、HKDF、SHAKE、AES-GCM 与 ChaCha20-Poly1305 的选择思路,并用 Seal/Open 示例固定一套可复查的配置。434 收藏 -
本文用一个只依赖标准库的 Go 小工具说明 pem.Block.Headers 如何写入自定义头字段,解释 pem.Encode 的稳定输出、错误处理、Decode 回读与测试夹具设计。434 收藏 -
Go io.LimitReader 适合放在任意 io.Reader 消费者前面建立字节上限。本文说明它与 io.ReadAll、io.Copy、JSON Decoder 的组合方式,并用 limit+1 读取区分正常 EOF、输入超限和底层错误。434 收藏