Go语言技术文章
-
讲清 Go database/sql.Tx.StmtContext 如何把已有的 DB 级预编译语句绑定到当前事务,并比较 Tx.PrepareContext、ExecContext 的适用场景、上下文边界和关闭时机。459 收藏 -
Go 的 io/fs.ValidPath 没有 nil 参数,所谓空值通常是空字符串。本文梳理空字符串、.、首尾斜杠、. 与 .. 元素、非法 UTF-8 的判断结果,并用小函数把语法错误和文件不存在分开处理。459 收藏 -
解释 Go url.ResolveReference 在空路径、查询串和片段之间的继承条件,通过原创建例区分空引用、显式问号与新路径,并说明保持原始查询和清除片段的业务取舍。459 收藏 -
Go token.File.LineStart 接受 1-based 行号并返回 token.Pos。本文用最小示例说明如何建立行表、把行首位置转换为文件内字节偏移,并避开无效行号、UTF-8 与 CRLF 带来的位置误判。459 收藏 -
用 net/http.CrossOriginProtection 保护状态变更接口时,如果健康检查使用非安全方法,可用 AddInsecureBypassPattern 配置精确的例外模式。本文说明方法匹配、直接匹配、冲突和默认拒绝边界。459 收藏 -
Cobra 的 RunE 应该返回错误,由 Execute 向上传递,最后在 main 中统一打印并返回非零退出码。本文给出可测试的代码结构,并说明 SilenceErrors、SilenceUsage 与参数错误如何一起纳入统一出口。459 收藏 -
go.sum 校验失败不一定都是镜像故障:目标版本变了、只存在 /go.mod 校验项、代理返回了不同内容,都会表现为依赖安装异常。本文按报错、版本、下载来源三组证据拆开判断,并给出不绕过校验的修复路径。459 收藏 -
Go Fuzz 测试发现失败输入后,如何用 f.Add 或 testdata/fuzz 语料固定回归案例,并用普通测试与受限 Fuzz 守住时间解析边界。459 收藏 -
在自定义 slog.Handler 里,Record.NumAttrs 适合回答“记录里有多少个顶层属性”,Record.Attrs 才负责按顺序交给处理逻辑;两者通常相等,但提前停止遍历、空 Group 被忽略以及嵌套 Group 的计数口径会让观察结果不同。459 收藏 -
读取数十万文件的目录时,os.ReadDir 的排序语义和一次性返回 []os.DirEntry 会同时影响内存与响应时间。本文从目录扫描小工具出发,比较 ReadDir 与 File.ReadDir 的边界,并给出保留排序、改为分批遍历和验收内存的实现方法。458 收藏 -
Golang · Go教程 | 2个月前 | sync · WaitGroup · 并发编程 · Go教程 · 工程实践 · Go 并发任务 错误传播 sync.WaitGroup.Go WaitGroup.Add
Go 1.25 新增的 sync.WaitGroup.Go 能把启动任务、计数和收尾绑定在一起,但它不负责错误返回,也不能让任务函数 panic。本文从 Add 竞态与错误传播两个现场,给出可核对的写法和验收边界。458 收藏 -
time.Time 的 Equal 比较时间点,== 还会比较 Location 和单调时钟读数。本文用可运行示例拆开两者的边界,并说明 Round(0)、UTC 与序列化后的差异。458 收藏 -
Go 的 http.ResponseController 可以在处理器内设置请求读取和响应写出的截止时间,但它不是整个服务的统一超时开关。本文用两个小场景拆开 Handler、Request.Body、ResponseWriter 与底层连接的调用关系,说明超时后的错误判断、清除方式和常见误区。458 收藏 -
Go 中 recover 只记录 panic 而不改 named result,函数可能在异常后返回 nil 错误。本文用最小示例说明 defer、recover、named result 与 goroutine 边界,给出可复用的错误转换和排查清单。458 收藏 -
Go http.Client 默认会跟随重定向。本文用 CheckRedirect 和 http.ErrUseLastResponse 保留原始 3xx 响应,说明 Location、请求头、响应体及普通错误返回的边界。458 收藏