Go语言技术文章
-
Go 数据竞争测试偶现失败时,可从具体包和测试名缩小范围,成对分析 race 访问栈定位共享对象,再统一加锁或隔离状态,并保留并发回归测试。335 收藏 -
Go 普通 map 发生并发读写时可能直接触发 concurrent map read and map write。本文按排障顺序说明如何确认写入边界、用 RWMutex 修复,以及什么时候才适合换成 sync.Map。375 收藏 -
recover 只能恢复当前 goroutine 正在展开的 panic。本文用调用栈边界解释父 goroutine 为什么接不住子 goroutine,并给出 worker 包装器、错误回传和资源清理的实现方式。353 收藏 -
Go flag 包中,解析后的变量值不能单独证明参数是否由用户传入。本文用 Visit 和 NFlag 判断实际设置项,再处理显式空字符串、布尔参数、默认值与配置合并的边界。175 收藏 -
解释 Go defer 直接参数与闭包读取的差异,结合 Go 1.22 循环变量语义,给出显式传参和小函数隔离生命周期的写法。475 收藏 -
Go 的 http.Header 是 map[string][]string,直接赋值或只复制 map 仍可能共享值切片。本文从旧写法的串改问题出发,说明 Header.Clone 的隔离语义、nil 与多值边界,以及从手写复制迁移到 Go 1.13+ 标准方法的检查清单。306 收藏 -
Go 中 error 是接口类型。本文解释为什么底层 *MyError 为 nil 时,返回的 error 仍可能让 err != nil 成立,并给出返回边界的修复与测试写法。348 收藏 -
Go 配置中的 500ms、2s 和 1m30s 不能按普通整数读取。本文用 time.ParseDuration 拆开格式边界、错误处理、负数与溢出问题,并给出启动阶段集中校验的写法。432 收藏 -
CGO_ENABLED=0 会让 cgo 构建约束失效。本文从环境确认、文件筛选到纯 Go 实现配对,说明如何定位“找不到实现”并稳定检查两条构建分支。329 收藏 -
Go build tags 选错实现文件时,先确认 GOOS、GOARCH、CGO_ENABLED,再用 go list 对照 GoFiles 与 IgnoredGoFiles,最后检查文件名后缀、//go:build 表达式和 -tags 参数是否一致。496 收藏 -
Go 下载依赖卡在 sum.golang.org 时,先区分模块代理和校验数据库的网络边界,再按公共模块、私有模块或内网代理选择 GOPROXY、GOSUMDB、GOPRIVATE 与 GONOSUMDB,避免用全局关闭校验掩盖配置问题。290 收藏 -
Golang · Go教程 | 11小时前 | 并发 · Go教程 · trace.NewTask go tool trace Go runtime/trace 执行跟踪 trace.WithRegion
Go runtime/trace 不只是记录运行时事件,还能用 task、region 和 Log 标记一次跨 goroutine 的业务操作。本文从排查现场出发,说明如何把任务上下文传入 goroutine、如何标记区间,以及如何避免结束时机和标记粒度失控。391 收藏 -
Go replace 指向本地路径在 CI 失效,通常是 checkout 范围、相对路径基准、替代目录 go.mod 或主模块作用域不一致。本文按主模块、模块文件、require/replace 配对和流水线输入给出排查与修复顺序。224 收藏 -
Go 拉取模块失败时,先检查 go.mod 的 module 声明是否与仓库根路径、包导入路径和 /v2 主版本规则一致,再决定改 module、改 import 还是使用 replace。192 收藏 -
用自定义 Region 类型实现 TextUnmarshaler,接入 Go flag.TextVar,讲清默认值、非法参数与 TextVar、Var、Func 的选择边界。184 收藏