Go问答技术文章
-
Golang · Go问答 | 6天前 | channel · 并发编程 · Go问答 · 异常排查 · range Go channel WaitGroup close 生产者退出 done channel
Go 的 range channel 结束,只能证明 channel 已关闭且数据已读空,不能单独证明生产者 goroutine 已经退出。本文用唯一关闭者、done channel 和 WaitGroup 拆开数据结束与生产者清理,说明零值读取、nil 阻塞和发送 panic 的边界。176 收藏 -
Go 的 recover 只能在同一 goroutine 正在展开的 defer 中直接调用。本文把 panic 转成可返回、可记录的 error,并说明后台 goroutine 的恢复边界与常见误区。388 收藏 -
Golang · Go问答 | 6天前 | goroutine · net/http · Go问答 · panic恢复 · HTTP排错 · Go recover panic 连接中断 Request.Context HTTP handler
Go HTTP handler 出现 panic 时,外层 recover、net/http 默认恢复和客户端连接中断不是同一件事。本文用最小中间件说明 recover 的作用域、已提交响应的边界、Request.Context 取消信号,以及子 goroutine 如何单独处理 panic。339 收藏 -
Go 中 recover 只记录 panic 而不改 named result,函数可能在异常后返回 nil 错误。本文用最小示例说明 defer、recover、named result 与 goroutine 边界,给出可复用的错误转换和排查清单。458 收藏 -
Go 返回接口值时,typed nil 会让接口看起来非 nil。本文用接口动态类型和值的关系,说明如何修正接口返回、error 成功分支和调用方复查。413 收藏 -
Go 类型断言返回 ok=true,只能说明接口里的动态类型匹配,不能证明断言得到的指针非 nil。本文用 typed nil 示例拆解接口值、断言结果和方法调用的边界,并给出 nil 与 error 的安全处理写法。103 收藏 -
解释 Go 中 typed nil 为什么会让 error != nil,演示如何拆分接口的动态类型和值,并给出无错误分支直接返回 nil 的修复写法。224 收藏 -
Go 泛型调用遇到 untyped constant 时,类型参数通常按默认类型推断,赋值左侧不会反向改变 P。本文用 MyInt 示例拆开推断、约束和显式转换的边界。259 收藏 -
Go 泛型约束允许某些类型,不代表一次调用可以让不同实参各自选择类型。本文从类型推断、无类型常量和可赋值规则入手,定位接口约束通过但调用仍类型不匹配的原因。443 收藏 -
Go 泛型函数调用时类型参数推断失败,先检查类型参数是否出现在普通参数中,再排查约束冲突、nil 和无类型常量,最后决定补写类型实参还是调整函数签名。159 收藏 -
Go 中同名包不代表同一个导入目标。本文用 go list 对照 ImportPath、Dir 和 Name,说明如何核对 go.mod 模块路径、internal 父目录与调用方边界,并定位真实加载错误。385 收藏 -
Go replace 只改变模块源码的解析位置,不会绕过 internal 的导入边界。本文用 go.mod、import path 和 go list 说明本地替换、模块改名及公共包迁移的处理方法。127 收藏 -
Go 导入 internal 包被拒绝时,应先定位 internal 目录上方的允许路径,再用 go.mod 和 go list 对照 ImportPath、Module.Path 及嵌套 module,最后选择移动调用方或提取公开 API。152 收藏 -
Go 交叉编译后的二进制运行时报架构错误时,先核对 GOOS、GOARCH 与产物格式,再区分纯 Go、cgo、动态加载器和目标机器不匹配,避免只改一个编译参数。137 收藏 -
解释 Go CGO_ENABLED=0 后依赖包无法编译的原因,教你用 GOOS、GOARCH、CgoFiles 和 GoFiles 判断文件选择,并在启用 cgo、纯 Go实现与自有包双实现之间做出可验证的修复。418 收藏