Go问答技术文章
-
Go 请求设置 Context 超时后,客户端会先结束这次请求的等待,但连接池状态和服务端任务不一定同时消失。本文区分请求取消、Transport 连接复用、响应体关闭以及服务端 Context 传播,给出可执行的排查和处理方式。180 收藏 -
Golang · Go问答 | 1个月前 | 超时控制 · HTTP客户端 · Go问答 · context.WithTimeout http.Client.Timeout Go httptest.Server.Client Go HTTP测试超时 httptest慢请求
使用 Go httptest.Server 做接口测试时,可以保留 Server.Client 的测试连接配置,再在首次请求前设置 http.Client.Timeout;需要单请求预算时,用 context.WithTimeout 控制并检查超时错误。180 收藏 -
Go t.Run 名称含斜杠时,-run 会把测试全名按斜杠分段匹配。本文用 HTTP/GET 案例说明分段正则、双斜杠空片段、默认不锚定与精确筛选的写法。180 收藏 -
Go constant.Value.ExactString 输出 1/10 并不是精度丢失,而是 go/constant 保留了小数常量的精确有理数表示。本文区分 String、ExactString、big.Rat 和 float64 的职责,说明如何选择正确的展示方式。180 收藏 -
Go 客户端提示证书主机名不匹配时,证书可能仍在有效期内且签发链可信。本文拆解实际校验名、DNS/IP SAN、Common Name、通配符、SNI 与代理选证书,并给出安全诊断程序和固定 IP 拨号的正确配置。180 收藏 -
omitzero 只按 Go 零值或 IsZero 返回值省略字段。本文从标签逗号、nil 与空容器、自定义零值和 Marshal 方向定位未生效原因。180 收藏 -
面向以 -cover 构建的长期运行程序,说明 Go runtime/coverage.WriteMetaDir 如何写出覆盖率元数据、如何准备目录,以及它与计数快照的边界。180 收藏 -
Go finalizer 不是确定性的资源释放入口。本文解释对象不可达、循环引用、零大小对象和进程退出等边界,并用显式 Close 加 finalizer 兜底的方式管理资源生命周期。180 收藏 -
把 time.After 放进高频循环,短时间内不断创建定时器,任务退出时还可能留下难以观察的等待路径。本文从一个轮询超时场景出发,拆解定时器创建、触发、退出和验证边界,并给出可回收的 time.NewTimer 写法。179 收藏 -
Go 里读到 io.EOF 不等于所有 Reader 都永久失效。本文用 bytes.Buffer、文件和分块读取场景拆开 EOF 的含义,说明缓冲区复用时该看什么状态,以及如何避免把 EOF 当成普通错误。179 收藏 -
Go 的 nil 指针接收者不一定一调用就 panic:方法可以先进入方法体,但字段解引用、值接收者和 nil 接口会形成不同边界。本文用最小示例拆开这些情况,并给出排查清单。179 收藏 -
Go json/v2 迁移的难点不在替换 import,而在字段名匹配、omitempty、nil 集合和未知成员等行为差异。用清单和 DefaultOptionsV1 可以分阶段切换。179 收藏 -
Go 的 http.Response.Body 是流式网络资源,调用方必须关闭。对 HTTP/1.x 而言,读到 EOF 再关闭更有利于连接复用;但大响应应有限排空或直接终止,不能为了复用盲目读取。179 收藏 -
解释 Go sync.Pool 的临时对象复用边界,说明 GC 为什么可以清空池、为什么不能拿它保存业务数据,并给出清理与并发核对方法。178 收藏 -
Go 1.21 给 bytes.Buffer 增加 Available 和 AvailableBuffer 后,如何判断可写余量、避免误解短写,并用 Cap 和 Len 验证扩容结果。178 收藏