Go语言技术文章
-
crypto/rand.Int 返回 [0,max) 范围内的均匀安全随机整数,但 max <= 0 会触发 panic。本文从上界边界、big.Int 构造、错误处理和取模偏差四个角度给出可直接复用的 Go 写法。241 收藏 -
遍历 database/sql.Rows 时,Next 返回 false 不代表一定成功。本文区分 Scan、Rows.Err 与 Rows.Close 的职责,说明自然遍历结束、提前停止和驱动关闭错误的处理顺序。241 收藏 -
Go os.Root.Chown 只负责在 Root 范围内调用系统的属主修改能力,返回权限错误通常与当前进程的 uid/gid 权限、平台支持、文件系统策略或符号链接语义有关。本文给出最小调用、错误分类和 Chown/Lchown 的选择方式。240 收藏 -
Go 的 GOFLAGS 会把已知命令行参数注入到默认行为中,且可能来自当前 shell 或 go env -w 的持久配置。本文用 go test、go list 和 go env 说明它的来源、覆盖顺序与清理方法。240 收藏 -
归档读取器拿到 CodePage437 原始名称字节后,应先用 charmap.CodePage437.NewDecoder() 转成 UTF-8,再交给文件名或展示层。本文给出短字节和流式读取两种写法,并整理标志位、错误处理、日志和回滚边界。240 收藏 -
Go x/text/currency 的货币展示受币种、语言地区和符号选项影响。本文给出固定币种的对照代码,区分 Default 与 FromTag,并说明存储和缓存应如何保留币种身份。240 收藏 -
使用 go-imap v2 把本地 RFC 822 邮件追加到指定邮箱,重点说明 Append 的邮件大小、AppendOptions、Write、Close 与 Wait 的调用顺序,以及权限、大小限制和重复投递边界。240 收藏 -
go-mp3 的时长应按解码后的字节数、每个采样的4字节格式和首帧采样率计算。本文给出可寻址文件与非可寻址流两种处理方式,并说明 Length 返回 -1 时的累计策略。240 收藏 -
Go flac 的 StreamInfo.NSamples 表示每个声道的时间轴样本数,不是所有声道采样值的总和。本文区分 NSamples、NChannels、BlockSize 与 Subframe.NSamples,说明统计时长、展开缓冲区和逐帧计数的正确口径。240 收藏 -
filepath.Glob 返回空结果不一定是错误,常见原因是相对路径依赖当前工作目录、* 不跨目录分隔符,以及路径转义和平台规则不一致。本文用可复用代码区分空匹配、ErrBadPattern 和路径构造问题。240 收藏 -
用 go/types 生成 Go 类型文档时,可变参数在 Params 中表现为最后一个切片,是否显示省略号由 Signature.Variadic 决定。本文说明如何使用 WriteSignature,以及如何安全地实现自定义参数渲染。240 收藏 -
Go encoding/csv 遇到带换行的引号字段时,物理行不等于逻辑记录。本文解释按行拆分为什么会造成字段错位,并用 csv.Reader.Read、ParseError 和字段数量设置给出可执行的排查与读取方案。240 收藏 -
介绍 Go 业务时区的加载、无偏移时间解析、UTC 存储与地区显示,给出完整示例,并说明时区数据依赖、固定偏移和旧字段迁移的注意事项。239 收藏 -
Go 1.27 的 vet printf 分析器会提示一种容易被忽略的错误包装:错误类型本身实现了 error,却把指针作为 %w 操作数。本文解释它为何影响 errors.As,以及怎样修复并纳入持续检查。239 收藏 -
Go channel 做 semaphore 时,先用 len 和 cap 判断再发送并不能保证并发上限。正确做法是让带缓冲 channel 的发送直接负责获取许可,接收负责释放,并用 select 表达不等待策略。239 收藏