Go语言技术文章
-
crypto/rand.Text 返回的不是任意字母数字串,而是基于 RFC 4648 Base32 的密码学安全文本。本文从官方实现拆开字符集合、长度与自定义字符表的边界。329 收藏 -
Go time.Parse 解析不带时区的字符串时会按 UTC 解释。本文从现象出发,说明何时使用 ParseInLocation、何时使用 In,并补充 IANA 时区、夏令时和错误处理的边界。329 收藏 -
Go Cron 同时设置日字段和星期字段时,不一定是两个条件都满足:robfig/cron/v3 在两者都为具体限制时按或匹配;使用 ? 留空其中一个字段,才适合表达只按日期或只按星期限制。329 收藏 -
Go JetStream 发布返回 PubAck 后,Duplicate=true 表示服务端按消息标识识别为重复发布,不等于消费端已经确认。本文用 nats.go 说明 WithMsgID、Stream、Sequence 和错误分支的实际边界。329 收藏 -
Go genetlink 的 Family.ID 是当前连接按名称发现得到的运行时结果,不宜写成跨环境复用的固定数字。本文说明 GetFamily、Family.Version 与 Execute 的配合方式,以及重连和缓存时应守住的边界。329 收藏 -
Go bufio.Scanner 默认按行切分,空行会作为长度为零的 token 返回;循环结束后要检查 Err 区分正常 EOF、底层读取错误和 token 过长。本文给出空行策略、Buffer 配置和按行读取代码的迁移清单。329 收藏 -
Go database/sql 驱动只有在连接已确认失效且操作不可能重复执行时才应返回 driver.ErrBadConn。本文解释 database/sql 的重试边界、驱动实现位置,以及业务代码为什么要保留结果不确定时的原始错误。329 收藏 -
io.MultiReader 会把多个 Reader 顺序拼成一条流,中间 Reader 的 EOF 会被内部消费,调用方只能看到最终 EOF。本文用包装 Reader 记录每个文件的结束事件和字节数,并说明错误处理、文件关闭与不应合并的场景。329 收藏 -
Go fmt.Appendf 可以把格式化结果直接追加到已有 []byte,减少 fmt.Sprintf 先生成字符串再 append 的中间路径。本文从缓冲区复用、容量准备、专用追加函数和基准测试讲清适用边界。329 收藏 -
Go go/ast.Inspect 得到空结果时,通常不是遍历器失效,而是解析结果没有目标节点、回调返回 false 提前剪枝,或统计逻辑忽略了实际节点类型。本文按根节点、回调返回值和 nil 收尾调用拆解这些边界。329 收藏 -
time.Ticker.Reset 本身不会让下一次 tick 立即到达。本文结合 Go 1.23 的定时器通道变化,解释陈旧 tick、并发接收和任务重入造成的错觉,并给出单一 goroutine 管理 ticker 的最小示例。329 收藏 -
用 Go 标准库 flag.Value 实现可重复的 -tag 参数,把每次 Set 按顺序追加到 []string,并说明默认值、错误处理、等号写法与适用边界。329 收藏 -
Go net/mail.Header.AddressList 返回 mail.ErrHeaderNotPresent 时,不要把缺少 From 头、空地址值和地址语法错误混成一个结果。本文给出可复用的判断分支、代码和日志清单。329 收藏 -
bytes.Buffer.Bytes 返回的是与缓冲区内容共享底层数组的切片。本文按数据生命周期说明什么时候可以直接读取,什么时候要用 append 复制成独立副本,并排查后续 Write、Reset、Truncate 和并发访问造成的覆盖误判。329 收藏 -
从导入图、包级变量依赖和 init 三个层面排查 Go 服务启动时读到错误全局配置的问题,并给出更可维护的初始化清单。328 收藏