Go问答技术文章
-
Golang · Go问答 | 2星期前 | goroutine · net/http · Go问答 · 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 收藏 -
Go 交叉编译开启 cgo 后找不到目标编译器,通常是只设置了 CGO_ENABLED 而没有准备匹配 GOOS/GOARCH 的 CC、目标头文件、运行库和链接器。本文按变量、工具链和报错层次给出排查方法。444 收藏 -
Go 的 build tag 不是只作用于测试文件。本文拆开构建约束、_test.go 后缀和 go test 文件选择规则,给出用 go list 与 go test 定位测试覆盖问题的方法。375 收藏