Go问答技术文章
-
Go flag.TextVar 同时连接 TextUnmarshaler 和 TextMarshaler:前者解析命令行输入,后者生成默认展示文本。本文用自定义类型说明接收者、类型匹配、帮助输出和错误处理边界。404 收藏 -
用 runtime/cgo.Handle 把包含 Go 指针的状态安全交给 C 保存和回调,说明 NewHandle、Value、Delete 的生命周期、并发边界与常见失效原因。403 收藏 -
Go 向已关闭 channel 发送会触发 panic。本文从发送生命周期出发,说明关闭责任如何划分,并给出多发送方等待后统一 close 的迁移写法与排查清单。402 收藏 -
Go 中自定义 RoundTripper 时,不要用空的 http.Transport 替换默认传输层。本文说明如何通过类型断言和 Clone 保留 ProxyFromEnvironment、连接复用与响应体边界。401 收藏 -
Go httputil.ReverseProxy 的 SetURL 会让出站 Host 默认跟随目标主机。本文用 Rewrite 先修改目标 URL,再保留入站 Host,并说明 X-Forwarded-Host、路径拼接与安全边界。401 收藏 -
Go 程序里的相对路径不是相对源码目录,而是相对进程当前工作目录。本文按 os.Getwd、filepath.Abs、显式配置根目录和部署检查清单的顺序,定位 IDE、测试、脚本与服务启动时的路径失效问题。401 收藏 -
Go 中直接比较 error 只检查当前错误值,errors.Is 会沿 Unwrap 错误链寻找匹配。本文用 %w、errors.Join 和自定义 Is 说明三种判断边界。401 收藏 -
QueryContext 取消后连接不一定立刻回到连接池。本文从 Rows 生命周期、驱动取消能力和 DB.Stats 观测三个角度定位原因,并给出可复用的释放与排查模板。400 收藏 -
go mod tidy 加入看似未使用的模块,通常是因为它会扫描测试、工具、构建标签和跨平台源码。本文用依赖路径、模块图和可回滚命令说明如何判断该模块是否应该保留。400 收藏 -
Go 源站关闭 HTTP/2 后客户端仍显示 h2,通常是因为客户端看到的是到 CDN、负载均衡或反向代理的前端连接。本文从逐跳协议边界、Server.Protocols 绑定、直连源站与 r.Proto 证据入手,定位真正仍在使用 HTTP/2 的链路。400 收藏 -
Go 中把 nil 指针放进接口后,接口本身可能不等于 nil,但方法仍可依据动态类型完成分派。本文用最小示例拆开 nil 接口、typed nil 和 nil 接收者的区别。399 收藏 -
解释 Go encoding/xml 的 Token API 为什么会让保存的 xml.CharData 被后续内容覆盖,并给出 CharData.Copy、string 和 CopyToken 的正确选择。399 收藏 -
Go 测试提前 Fatal 时,已注册的 t.Cleanup 仍会在测试边界执行。本文梳理后进先出、父子测试资源归属,以及异步 goroutine 错误回传的安全写法。399 收藏 -
解释 Go MaxBytesReader 在请求体超限时如何返回 MaxBytesError、通知服务器关闭连接,以及 ResponseWriter 包装和中间件顺序为何会影响该信号。399 收藏 -
Go 遇到 import cycle not allowed 时,关键不是搬文件,而是拆开包依赖环。本文用 checkout、payment 和 PaymentGateway 示例说明接口归属、隐式实现、组合根注入及 go list 排查方法。398 收藏