Go语言技术文章
-
Go 用 crc64.New 创建 hash.Hash64 后,可以把文件分块写入同一个哈希状态,再通过 Sum64 取得最终校验和。本文用 io.CopyBuffer 实现固定内存的流式读取,并说明错误处理、分段续算、算法表和结果比较的边界。462 收藏 -
Go mod edit 的 replace 可以在不改 import 路径的情况下,把当前主模块依赖切到本地目录。本文区分指定版本与全版本替换,说明 require、module 路径和删除临时替换时的边界。462 收藏 -
Go 测试里临时目录、数据库连接和环境变量如果没有按作用域清理,单测会出现串状态和偶发失败。本文用 testing.T.Cleanup 对比 defer、子测试和失败路径,给出资源注册顺序与验收清单。461 收藏 -
time.AfterFunc 返回的 Timer 既可能尚未触发,也可能已经进入回调。本文用 Stop、Reset 和回调状态拆解竞态边界,给出可验证的防重复调度写法。461 收藏 -
crypto/rand.Read 的签名虽然返回 n 和 err,但当前 Go 文档规定它会填满切片且不返回错误。本文从 Reader、io.ReadFull 和失败测试边界解释为什么不能把部分字节当成可用随机值。461 收藏 -
解释 Go html/template 为什么会对 URL 查询参数和路径片段做上下文转义,并区分正常百分号编码与不安全协议导致的 #ZgotmplZ。461 收藏 -
Go 文件是否参与编译,不只看 //go:build,也要把 _GOOS、_GOARCH 或组合后缀带来的隐含条件一起判断。本文用 go list 区分 GoFiles 与 IgnoredGoFiles,并说明 -tags、gofmt 和 _test.go 的边界。461 收藏 -
Go 中两个 error 的 Error 文本相同,接口值仍可能不相等。本文解释动态类型和值的比较规则,并用 sentinel、errors.Is、errors.As 给出稳定的错误判断方式。461 收藏 -
os.Root 支持多个 goroutine 并发调用,但 Close 不是业务停机屏障。本文结合官方文档与源码说明在途操作、后续调用和已打开文件的不同结果,并给出先停止准入、排空任务、最后关闭 Root 的实现。461 收藏 -
json/v2 中 omitzero 按 Go 零值判断,omitempty 按 JSON 空值判断。本文用字段类型、IsZero 和迁移清单说明如何选择。461 收藏 -
已有 database/sql.Stmt 需要在事务里执行时,用 Tx.StmtContext 把它映射为事务专用语句。本文说明 context 的作用、提交或回滚时的关闭边界,以及 DB 级 Stmt 与事务级 Stmt 的清理方式。461 收藏 -
Go recover 必须在发生 panic 的同一 goroutine 中由延迟函数直接调用,父函数不能恢复子任务 panic。通过同步与异步示例解释恢复位置、命名返回值和 Result 回传,并保留堆栈、明确数据一致性与新任务边界。461 收藏 -
用 Go 的 http.Pusher 接口断言和 Push 返回值判断 HTTP/2 服务端推送能力,并为 HTTP/1.1、客户端禁用推送和中间层降级保留普通响应路径。461 收藏 -
Go heap 修改优先级后顺序不变,通常与未调用 Fix、修改副本或使用旧索引有关。本文用任务队列说明位置表、Swap 与 Pop 的职责及并发边界。461 收藏 -
TestMain 控制包级测试入口,错误的 os.Exit 可能覆盖子测试失败状态。本文说明正常返回的退出语义、保留 m.Run 结果的方法,以及辅助函数清理、CI 状态传播和并行子测试的边界。461 收藏