Go问答技术文章
-
go/build.Context 本身保存构建配置和文件系统回调,不是需要 Close 的资源。本文沿 OpenFile、Import、MatchFile 的调用边界,定位真正未释放的 ReadCloser、文件描述符和外围 goroutine。169 收藏 -
区分 tcell Show 的日常显示提交与 Sync 的全量重同步,用固定版本事件示例说明普通变化、主动重绘和尺寸事件的取舍,并排除业务状态、布局及外部输出干扰。168 收藏 -
Go 中 select 搭配 default 会把等待变成立即返回;如果外层再套无限循环,就可能形成忙循环并持续占用 CPU。本文从定位、阻塞等待、定时退避、退出信号和运行指标五个角度给出修正写法。168 收藏 -
Go TLS 客户端自定义 CA 不生效,通常是证书池、RootCAs 或 HTTP Transport 没有接通。本文按证书输入、TLS 配置和请求客户端三层定位问题,并给出保留系统根证书的配置方式。168 收藏 -
bufio.Reader.Peek 能查看固定长度前缀而不推进缓冲读取位置,但可能预读底层输入。通过四字节标识示例说明同一 Reader 的后续读取、短输入、ErrBufferFull 及返回切片的有效期。168 收藏 -
Go channel 的关闭责任应由能证明不会再发送的一方承担。本文说明关闭后的发送与接收语义,给出单发送方和多发送方的 close owner、停止信号与 WaitGroup 组织方式,帮助排查 send on closed channel panic。168 收藏 -
围绕 Go tls.Config.VerifyConnection 说明握手回调顺序、ConnectionState 观测、恢复会话与自定义证书校验的边界,给出可落地的记录和错误返回方案。167 收藏 -
区分 Ants Release 关闭池与业务任务完成,通过完整 WaitGroup 批处理示例处理提交失败计数,并说明停止生产者、超时等待、任务取消和业务成功的不同含义。167 收藏 -
Go 中 errors.As 取不到自定义错误字段,通常不是字段不存在,而是目标类型、指针层级或错误链没有对上。本文从故障现场拆开直接返回、%w 包装、值与指针接收者和 Unwrap 的边界,给出可复查的修复清单。166 收藏 -
Go json.Decoder 字段为空时,先看错误,再检查导出字段、JSON标签、大小写、嵌套层级、目标指针和输入流。区分缺失、null与空字符串,并说明严格模式的兼容取舍。166 收藏 -
Go work 没有使用本地模块,通常不是本地代码没有更新,而是工作区没有被当前命令发现、use 没指向含 go.mod 的模块根目录、导入路径与 module path 不一致,或 GOWORK=off 关闭了工作区。本文按排查顺序给出修复方法。166 收藏 -
Go 源码分析中,ast.Ident 只有语法名字,不能直接说明它代表变量、函数还是类型。本文用 go/types.Info.ObjectOf 统一查询标识符对象,并解释 Defs、Uses、nil、嵌入字段与 TypeOf 的边界。166 收藏 -
解释 Go testing.Parallel、t.Run 与 Cleanup 的执行边界,帮助你安排测试夹具和资源释放,避免并行子测试提前清理共享资源。166 收藏 -
Goose 的 .env 加载和 SQL 迁移变量替换是两套机制:前者提供 GOOSE_* 等 CLI 配置,后者默认关闭,必须用 -- +goose ENVSUB ON/OFF 包住查询。本文按配置来源、占位符语法和发布检查梳理为什么变量没有自动替换。166 收藏 -
Go NATS 客户端退出时,Drain 会先让订阅进入排水状态、停止继续接收新的发布,再在收尾后关闭连接;Close 则直接关闭连接并释放阻塞调用。本文用故障复盘场景拆解两者边界、超时配置和选择方法。166 收藏