Go语言技术文章
-
掌握 Go database/sql 的事务收尾方式:用 defer tx.Rollback 做失败兜底,所有操作走 sql.Tx,只有 Commit 返回 nil 才使用事务结果,避免提交错误被误判为成功。348 收藏 -
Go 泛型出现 cannot infer type 时,先判断类型参数是否出现在普通实参中,再用显式类型参数或调整函数签名完成修复。105 收藏 -
用 sql.NullString 扫描 nullable 文本,清楚区分数据库 NULL、空字符串和普通字符串,并说明批量读取、写回和接口映射中的常见坑。260 收藏 -
Go fuzz 测试一直产生新输入时,先区分覆盖率探索与输入域失控,再用 seed corpus、长度格式约束和固定 fuzz 预算缩小空间,让失败样本更快复现。124 收藏 -
Go database/sql 的 sql.Stmt 可以在重复 SQL 中复用。本文按 DB、事务和局部函数三种边界说明 PrepareContext、StmtContext 与 Close 的正确放置,避开反复 Prepare 和资源迟迟不释放。106 收藏 -
Go benchmark 每次运行结果差很多,通常不能只靠增加 -count 解决。本文从计时区间、go test 参数、机器隔离和 benchstat 比较四个方面,给出一套可重复的环境噪声控制方法。111 收藏 -
用 Go crypto/rand 生成固定长度的密码学随机字节,编码为 URL 安全令牌,并说明 rand.Read 与自定义 Reader 的错误处理差异。371 收藏 -
Go TestMain 没有 error 返回值,初始化失败时应先清理已创建资源,再用 os.Exit(1) 明确阻断测试;初始化成功则保存 m.Run 的退出码,清理后原样返回。130 收藏 -
Go test ./... 返回很快并不一定是测试没执行,本文区分本地目录模式与包列表模式,说明如何识别 (cached)、用 -count=1 强制重跑,并选择 GODEBUG 与 testcache 清理范围。444 收藏 -
Go 校验 HMAC 签名时,不要把十六进制或 Base64 文本当普通字符串比较。本文说明如何重新计算 MAC、解码签名并使用 hmac.Equal 比较,同时处理编码错误、长度边界和请求鉴权中的常见误区。387 收藏 -
用 sha256.New 配合 io.Copy 流式读取大文件,计算 SHA-256 摘要并处理字节数、读取错误与自定义缓冲区。168 收藏 -
Go trace 页面打不开,先检查 trace.out 是否仍在写入,再确认 trace.Stop、文件 Close 和进程退出顺序,最后排除浏览器与旧格式兼容问题。210 收藏 -
用 Go archive/tar 解压时,先按 Header 区分目录、普通文件和链接,再把普通文件复制到安全目标路径,避免目录误写和归档路径越界。189 收藏 -
Go pprof profile 为空时,先区分采样窗口、目标负载、阻塞与互斥采样开关,以及 StopCPUProfile 和 Writer 写入边界,再选择正确的修复动作。364 收藏 -
Go archive/zip 读取 ZIP 清单时,可以先访问 Reader.File 和 FileHeader,只拿名称、大小、压缩方式等中央目录信息;确认需要正文后再调用 File.Open。231 收藏