Go语言技术文章
-
go vet 的 copylocks 检查会提醒你:包含互斥锁、Once 或 WaitGroup 的值不应沿着参数、返回值、赋值和 range 路径被复制。本文用最小结构体说明告警边界,并给出指针接收者、指针集合和 CI 检查的修复方式。441 收藏 -
Go cgo 构建遇到 undefined symbol 时,先用 go build -x 找到实际链接输入,再按 -L 搜索路径、-l 库名、依赖顺序和 pkg-config 逐项定位。本文只讨论 #cgo LDFLAGS 与链接器输入。441 收藏 -
Go race 无报告不能证明全程序并发正确。本文从包范围、实际路径和共享对象排查覆盖盲区,给出并发用例结构与测试参数,并区分数据竞争检测和业务断言。441 收藏 -
Go image/png.Encoder.BufferPool 可以复用 PNG 编码过程中的临时 EncoderBuffer。本文用 sync.Pool 适配 Get/Put,说明批量编码接入方式,以及并发、错误路径、超大图片和固定容量边界。441 收藏 -
Go 的 net.Resolver 可能在纯 Go DNS 解析和系统 cgo 解析之间走不同路径,因此同一域名会出现地址顺序、搜索域或错误表现差异。本文用 PreferGo、GODEBUG=netdns 和可控 Dial 构造最小复现,帮助定位解析器选择边界并写回归测试。441 收藏 -
用 Go textproto.MIMEHeader.Del 按规范化键名删除请求头字段及其全部值,并区分 Del、Get、Values 与直接 map 访问的边界。441 收藏 -
围绕 Go context.WithCancelCause 排查取消原因取不到的问题,说明读取时机、ctx 对象、cancel 参数以及父子上下文首次取消顺序。441 收藏 -
用 Go math/bits.TrailingZeros64 扫描 64 位位图时,零值返回 64,不能直接当作有效位编号。本文给出最低置位提取、清位循环、索引映射和边界检查方法。441 收藏 -
Go HTTP 客户端连接复用变差,常见原因确实是响应体没有正确关闭或没有及时读到 EOF,但 Close 并不等于任何场景都能复用。本文区分 Body 生命周期、HTTP/1.x 与 HTTP/2,并给出可落地的处理写法。441 收藏 -
Go 定时任务最容易被忽略的问题不是如何按时触发,而是上一次还没结束时下一次又开始。本文用 context、超时和退出确认设计一个不会重叠执行的任务循环,并说明失败、取消和告警怎么收口。440 收藏 -
通过一个可运行的 Go 示例,拆解 sort.Find 的比较函数方向、最小插入点和 found 返回值,避免把它误用成返回 -1 的查找函数。440 收藏 -
go/types.Info.FileVersions 可以告诉静态分析工具每个 ast.File 使用的 Go 语言版本。本文用一组可运行的类型检查代码说明文件版本、Config.GoVersion、Package.GoVersion 的关系,并处理版本缺失、类型错误和未来版本等边界。440 收藏 -
Go 的 trace.Stop 太晚会让无关运行阶段混入追踪,也可能因 defer 顺序错误在文件关闭后仍尝试写入。本文用采集窗口和资源生命周期解释正确写法。440 收藏 -
Go 的 url.URL.JoinPath 会通过 path.Join 清理路径中的连续斜杠、./ 和 ../。本文用 API 路径、PathEscape 和方案对比说明为什么双斜杠会改变,以及什么时候不该使用 JoinPath。440 收藏 -
讲清 Go database/sql 中 Rows.Next 返回 false 的双重含义,给出 Query、Scan、Rows.Err 和 Close 的错误边界与可复用代码模板,避免把迭代失败误判为正常结束。440 收藏