Go语言技术文章
-
Go 新循环变量语义改变了 loopclosure 诊断。区分循环声明与外部赋值变量,用显式参数绑定任务,并说明无诊断不代表闭包或共享对象并发安全。485 收藏 -
go vet 的 copylocks 检查会提醒你:包含互斥锁、Once 或 WaitGroup 的值不应沿着参数、返回值、赋值和 range 路径被复制。本文用最小结构体说明告警边界,并给出指针接收者、指针集合和 CI 检查的修复方式。441 收藏 -
Go test -json 输出是换行分隔的 JSON 事件流。本文按 Action、Package、Test 和 Output 等字段拆解测试事件、构建事件与输出拼接方法,并给出可直接接入 CI 的 Go 解析示例。330 收藏 -
Go trimpath 改写构建机绝对路径后,仍可保留文件名与行号。通过错误日志示例,对比两种构建,并用发布标识、源码快照和逻辑路径维持可用定位。270 收藏 -
Go build 默认会在条件满足时写入版本控制信息。本文围绕 -buildvcs 解释 stamping 失败的原因、仓库边界和修复选择。337 收藏 -
Go 模块解析遇到某个已知不能加载的版本时,可以在主模块 go.mod 中用 exclude 精确排除 module@version,再观察解析器是否选择更高可用版本。本文同时说明它与 replace 的边界,以及为什么不会改写下游模块。275 收藏 -
Go cgo.Handle 用整数关联 Go 值,让 C 回传标识后由 Go 取值。同步双文件示例说明 NewHandle、Value、Delete 的职责,以及异步回调和重复释放的风险。321 收藏 -
Go 模块发布错误版本后,不要删除旧 tag 或覆盖原版本。本文说明如何在 go.mod 使用 retract 撤回单个版本或版本区间,为什么必须发布更高版本,以及如何用 go list 和 go get 核对撤回提示与兼容边界。374 收藏 -
Go 依赖出现 go.sum 校验不一致时,先区分 .mod 与源码 zip 的哈希,再记录 GOPROXY、GOSUMDB 和 GOPRIVATE,用同一模块版本对比代理与 direct,最后按来源修复而不是盲目删除 go.sum。238 收藏 -
Go plugin.Open 加载 .so 时,版本不匹配通常不是单看 Go 版本,而是宿主与插件的工具链、构建条件和共享依赖没有保持一致。本文按排查顺序定位原因,并给出统一构建方案。495 收藏 -
Golang · Go问答 | 2小时前 | CGO · 内存管理 · Go问答 · Go CGO unsafe.Pointer 指针传递 runtime/cgo.Handle runtime.Pinner
Go cgo 传指针最重要的不是指针类型,而是内存由谁分配、是否包含 Go 指针以及 C 是否会在调用返回后保存它。本文按临时借用、C 堆复制、runtime.Pinner 和 runtime/cgo.Handle 说明安全边界。124 收藏 -
围绕 Go database/sql 事务重试边界,说明怎样识别明确死锁错误、回滚完整事务、使用有限退避,并通过统一加锁顺序、幂等设计和提交不确定性避免把重试变成重复写入。119 收藏 -
Go Rows 关闭后 Next 返回 false,而 Err 不一定因主动关闭变成非 nil。用假设排障场景解释返回 Rows 前 defer Close 的所有权错误,并给出消费与关闭责任统一的函数写法。401 收藏 -
Go binary.Read 按协议字段顺序和字节序读取数据,不会自动把结构体隐式对齐当成报文字节。本文用固定头、显式保留字段、长度检查和跨平台解析说明如何定位结构体对齐误解。335 收藏 -
Go database/sql 遍历 Rows 时,Scan 失败要及时停止读取并关闭结果集;循环结束后还要检查 Rows.Err,区分行转换错误与驱动读取错误。217 收藏