Go问答技术文章
-
Go HTTP2Config.StrictMaxConcurrentRequests决定HTTP/2流额度满时等待还是增加连接。文章对比两种策略,给出客户端配置示例,并区分流额度、连接预算与业务并发限制。267 收藏 -
context.Cause只读取取消原因,不会关闭资源或等待协程退出。文章区分取消信号、阻塞点、资源所有权和结束确认,并用文件导出示例说明如何安排cancel、Close与返回结果。187 收藏 -
Go context.Cause 看起来不稳定,通常不是 Cause 随机变化,而是父子 context 的第一次取消顺序、CancelCauseFunc 调用时机或超时 API 选择不明确。本文用最小代码拆开 Err、Cause、取消顺序和并发入口,给出可复查的排查方式。118 收藏 -
context.Cause 返回的 error 不能只靠字符串判断。本文从取消信号的生命周期出发,说明如何用 ctx.Err() 判断标准状态,用 errors.Is 和 errors.As 判断自定义原因,并区分主动取消、超时和父级传播。238 收藏 -
Go 升级后 runtime.KeepAlive 相关代码出现差异时,先不要把问题归因于 API 随机变化。本文从对象可达性、终结器、底层资源句柄、数据竞争和 unsafe/cgo 约束五条线定位原因,并给出正确放置 KeepAlive 的最小写法。396 收藏 -
使用 bytes.Buffer 时,Grow(n) 不是越大越好。本文按固定大小、近似大小和未知大小三种输入场景,说明如何估算 n,区分 len 与 cap,并给出避免频繁扩容和过度预分配的实用流程。372 收藏 -
runtime.KeepAlive 只保证对象在指定位置前仍然可达,不负责关闭文件描述符、连接或其他外部资源。本文从终结器提前运行的风险出发,说明 KeepAlive 的正确位置、显式 Close 的责任和资源持续占用的排查方法。176 收藏 -
Go runtime.KeepAlive 只负责在指定调用点保持对象可达,不会修复数据竞争或非法指针。本文按资源句柄、终结器、unsafe/cgo 与并发边界拆解结果不稳定的排查方法。423 收藏 -
Go工具链升级后出现编译、测试或运行行为变化时,固定源码和依赖,用新旧工具链建立对照,区分模块声明、兼容默认值与环境差异,并保存可复现的定位记录。122 收藏 -
Go go toolchain 配置没有生效时,先检查当前目录、GOTOOLCHAIN 来源以及 go.mod、go.work 的 go/toolchain 行,再按优先级清理覆盖配置。本文给出一套从现象到最小确认的排查顺序。475 收藏 -
runtime.KeepAlive 本身没有错误返回值。本文从受保护的资源操作入手,说明如何保留 n 和 err,再用 errors.Is、errors.As 区分中断、句柄失效与其他底层原因,并把 KeepAlive 放在正确的生命周期边界。341 收藏 -
Go go toolchain 看起来没有释放时,先区分命令进程与模块缓存。本文按工具链选择、GOMODCACHE、GOCACHE 和进程观察逐层排查,说明什么时候清理缓存,什么时候应该继续查启动器或 CI 任务。155 收藏 -
Go 1.21 以后,go 命令可能根据 GOTOOLCHAIN、go.mod 或 go.work 选择另一个工具链。本文按错误形态区分配置语法、版本过旧、PATH 缺失和自动下载失败,并给出用 go version、go env 与 toolchaintrace 定位的顺序。172 收藏 -
Go 工具链在目录、终端和 CI 中选择不同版本时,如何核对 PATH、GOTOOLCHAIN 与项目声明,控制执行来源并记录实际版本。404 收藏 -
go mod tidy 升级后出现依赖增删、go.sum 变化或程序行为不同,不要直接回滚。本文按基线、diff、模块图、工具链和分层复现五步定位变化来源,并给出可提交的判断标准。267 收藏