Go语言技术文章
-
Go template.Template 看起来不生效,通常不是模板对象失效,而是 Parse、Execute、命名模板、数据字段或 FuncMap 的边界没有处理好。本文按最小代码、文件模板和并发复用逐层排查,并保留真实错误信息。451 收藏 -
Go HTTP 请求返回 EOF 时,先按 Client.Do、Response.Body 读取和 JSON 解码三个阶段定位,再结合状态码、正文长度和接口契约区分服务端连接提前结束、空响应、传输截断与解析失败。450 收藏 -
Go HTTP Range 返回长度不对时,常见根因不是一个字段,而是区间闭端点、文件 Seek 大小、压缩解码和自定义响应头互相错位。本文按服务端、标准库和客户端三层给出判断与修复方式。449 收藏 -
Go log/slog 不会替业务字段自动排序。本文用固定属性切片、动态键排序、With 与 Group 的边界,说明怎样让 TextHandler 和 JSONHandler 的日志字段保持可预测顺序。448 收藏 -
Golang · Go问答 | 6天前 | 并发 · pprof · 性能排查 · Go问答 · Go Goroutine pprof net/http/pprof runtime/pprof 并发排障
Go goroutine 泄漏的关键不是单看数量,而是定位长期阻塞且再也等不到解除条件的代码行。本文从数量趋势、runtime/pprof 栈、channel 与锁的退出条件入手,给出可复用的排查和修复路径。446 收藏 -
Go 的 multipart.FileHeader.Open 返回一个可读取、可关闭的文件接口。本文说明如何在打开成功后及时安排 Close,怎样分别处理读取与关闭错误,以及为什么它和 Form.RemoveAll 不是同一件事。446 收藏 -
Go SMTP 返回 535 时,不要只看错误码猜原因。本文用 net/smtp 的 Auth、Mail、Rcpt 阶段区分账号认证失败与信封发件人被策略拒绝,并给出保留 SMTP Code 和 Msg 的排障写法。445 收藏 -
Go 连续读取多个 PEM 块时,第二段找不到往往不是证书不存在,而是没有继续消费 pem.Decode 返回的 rest,或忽略了 PEM 必须从行首开始、在行尾结束的格式要求。445 收藏 -
用 os.DirFS 和 fs.WalkDir 固定文件系统边界,直接消费相对路径完成 Go 文件批处理,并说明路径转换、DirEntry、错误处理、排序和符号链接的性能边界。444 收藏 -
用 Go 1.23 的 iter.Pull 把 iter.Seq 转成 next/stop 逐项读取,覆盖 ok 判断、提前退出和 defer stop 的可复用写法。443 收藏 -
Go crypto/subtle.ConstantTimeLessOrEq 只适合比较非负且不超过 2^31-1 的 int。本文结合一个小型范围判断封装,说明它的 0/1 返回值、输入边界和与普通 <=、ConstantTimeCompare 的区别。442 收藏 -
Go 的 net.Resolver 可能在纯 Go DNS 解析和系统 cgo 解析之间走不同路径,因此同一域名会出现地址顺序、搜索域或错误表现差异。本文用 PreferGo、GODEBUG=netdns 和可控 Dial 构造最小复现,帮助定位解析器选择边界并写回归测试。441 收藏 -
Go debug/dwarf.Reader 按前序顺序读取 DIE,Children 表示后面有子树,Tag 为零表示当前子列表结束,nil 则表示整个 info section 读完。本文用深度计数器和 SkipChildren 讲清遍历写法。439 收藏 -
Go 的 net/url.URL.Port 只返回 URL 中显式写出的端口,不会自动补出 http 或 https 的默认端口。本文用一段可复用的解析代码说明显式端口、默认端口、IPv6 主机和异常输入的处理边界。439 收藏 -
默认 bufio.ScanLines 能识别 LF 与 CRLF,却不会把单独 CR 当作行结束。本文实现一个兼容混合行尾的 SplitFunc,并说明缓冲区末尾、atEOF、长 token 与错误检查的处理方式。438 收藏