Go问答技术文章
-
Go archive/zip 遇到非内置压缩方法时,可以在 Reader 上注册自定义 Decompressor。本文说明方法编号映射、io.ReadCloser 返回值、File.Open 选择解压器以及校验和和并发资源边界。359 收藏 -
Go 流式响应写入后迟迟不到客户端,通常不只是少调用一次 Flush。本文从 http.Flusher、响应包装器、代理缓冲和 ResponseController 四个层面整理处理方式,并给出可回退的排障清单。359 收藏 -
sync.Cond.Wait 返回只代表当前 goroutine 被唤醒并重新拿到 Locker,不代表共享条件仍然成立。本文从解锁、唤醒、重新加锁三个状态说明为什么必须用 for 循环检查条件,并给出条件读写、Signal 与排障边界。359 收藏 -
Go 中 *MyError(nil) 放进 error 接口后为何仍不等于 nil?本文用动态类型、动态值和可复制的排查代码说明原因,并给出正确返回方式。359 收藏 -
Go testing.T.Chdir 会修改整个测试进程的当前工作目录,因此不能和 t.Parallel 或拥有并行祖先的测试混用。本文解释冲突原因,并给出串行使用和显式传递目录两种安全组织方式。359 收藏 -
Go 接口不等于 nil 时,问题通常不是 nil 比较失效,而是接口仍携带动态类型。本文用 typed nil、error 返回和类型断言示例,说明如何定位调用失败并修正返回边界。358 收藏 -
Go 没有 panicreturn 关键字,常见写法是用 defer 和 recover 捕获包内 panic,再改写命名返回值中的 error。本文用原创代码说明恢复边界、显式 return 和常见排查点。358 收藏 -
Go compress/flate 复用解压器时,Reset 会清理内部状态但不会清空调用方的输入和输出缓冲。本文用代码和边界清单定位上一段数据残留、输入游标错位、Close 缺失与字典不匹配。358 收藏 -
Go 的 QueryRowContext 总会返回非 nil 的 Row,查询错误、无结果和类型转换问题会延迟到 Scan。本文用可运行的错误分支解释这一设计,并给出 sql.ErrNoRows、Context 和 Row.Err 的正确处理方式。358 收藏 -
对比 Go FlightRecorder 与 trace.Start 持续 execution trace 的触发时机、数据范围和资源边界,并用可切换小项目给出选型方法。358 收藏 -
Go 模糊测试默认会让多个 worker 并发调用 fuzz target,固定临时文件名因此可能被覆盖或提前删除。本文用 t.TempDir、os.CreateTemp 和目录注入给出可复现、可清理的修复方式。358 收藏 -
Goja 脚本被 Interrupt 返回后,先等待执行结束并调用 ClearInterrupt,再根据脚本是否产生半执行状态决定复用 Runtime 还是重新创建。358 收藏 -
说明 Go x/image/font/opentype 中 Font、Face 和字体源数据的生命周期区别,给出多个字号分别创建 Face、并发使用与逐个 Close 的资源管理写法。358 收藏 -
Go HTTP 客户端超时并不只有一个开关。本文把一次请求拆成 DNS、TCP 连接、TLS 握手、响应头和响应体阶段,说明 http.Client.Timeout、DialContext、TLSHandshakeTimeout、ResponseHeaderTimeout 与请求上下文各自负责什么,并给出带阶段追踪的可复用配置。358 收藏 -
Go 私有模块可用 GOPRIVATE 与 GONOSUMDB 排除公共校验数据库查询,同时保留公开依赖校验。本文区分代理和校验职责,并给出直连私仓及企业代理两种配置示例。358 收藏