Go问答技术文章
-
Go Transport 请求后连接池立即变空,通常不是连接池失效,而是连接仍在使用、响应体未读完或关闭、Keep-Alive 被禁用、空闲超时过短,或者 Transport 被重复创建。本文按状态、代码和配置边界给出排查顺序。148 收藏 -
连接超时不限制响应体读取。通过有限响应客户端示例区分拨号、响应头和总预算,处理 context 生命周期、读取错误、正文大小与关闭责任,并说明流式请求的不同策略。483 收藏 -
Go testing.T.SkipNow 结束的是当前测试函数的后续语句,不会跳过已经登记的 t.Cleanup。本文拆解 SkipNow、runtime.Goexit、子测试和后台 goroutine 的生命周期边界,给出资源登记与跳过用例复查清单。191 收藏 -
解释 Go runtime/debug.SetMaxStack 的单 goroutine 栈上限、旧值返回、只限制未来增长的语义,并区分堆内存、GC 和线程数治理边界。420 收藏 -
Go time.Time.Truncate 按绝对时间取整,半小时偏移的时区可能仍显示本地 :30。本文用最小示例区分固定时长边界与本地日历边界,并给出保留 Location 的 time.Date 重建方案。215 收藏 -
Go 反射删除 map 元素时,SetMapIndex 的 elem 要传 reflect.Value{};本文说明零 Value、类型可赋值和 nil map 的边界。396 收藏 -
从 sync.Pool.Put 的 nil 快速返回讲清未类型化 nil、typed nil 与 Pool.New 的边界,给出可复用临时对象时的类型断言、状态清理和安全兜底写法。189 收藏 -
Go WebSocket 升级前写响应体,通常会先提交普通 HTTP 状态,后续就无法再完成 101 Switching Protocols。本文按请求检查、http.Hijacker 接管、101 握手和帧通信的生命周期拆开说明,并给出正确的写入顺序。197 收藏 -
Go 用较短内容覆盖旧文件时不会自动删除尾部字节,使用 os.File.Truncate 按新长度截断,并注意文件偏移、写权限和并发边界。314 收藏 -
Go html/template 解析多个文件或 define 命名模板后,可以用 Templates 遍历关联模板并读取 Name,再用 Lookup 检查某个名称是否存在。本文给出最小示例,并说明 ParseFiles 根名称、命名模板和 ExecuteTemplate 参数不一致时的排查顺序。122 收藏 -
用 Go netip.ParseAddr 解析带接口作用域的 IPv6 地址,读取 Addr.Zone,并掌握 WithZone、As16 与 Prefix.Contains 的边界。363 收藏 -
strconv.Unquote 解析配置值失败,通常不是反斜杠本身不能出现,而是输入没有遵守 Go 字符串字面量的引号和转义规则。本文用路径配置拆开缺少引号、未知转义和重复转义三种情况,并给出统一处理与 Quote 配对的写法。203 收藏 -
以Linux交叉构建为范围,区分目标架构与链接方式,介绍关闭cgo和保留目标C工具链两条路线,并说明动态加载器、共享库及运行镜像迁移条件。397 收藏 -
Go 表驱动测试调用 t.Parallel 后,子测试可能在外层循环继续修改变量时才真正执行。本文从调度语义、Go 1.22 循环变量规则和指针切片共享边界说明原因,并给出兼容旧模块的修复写法。459 收藏 -
Go race 没有报告某次数据竞争,并不等于代码绝对安全。本文从运行路径、并发时序、race 构建和 !race 文件四个方面拆解漏报原因,并给出一份可复查的测试覆盖清单。488 收藏