Go语言技术文章
-
Go http.Transport 的 WriteBufferSize 控制 Transport 写入网络连接时使用的缓冲区。本文说明零值默认行为、共享 Transport 的配置方式、按连接评估内存代价,以及哪些问题不该靠调大写缓冲解决。434 收藏 -
Go HTTP Transport 复用连接时,应分别设置空闲池预算、每目标总连接上限与超时。通过共享客户端小项目说明响应体处理、httptrace 观察及 HTTP/2 下的取舍。227 收藏 -
Go HTTP 超时不能只看一条错误字符串:context deadline、http.Client.Timeout 和 Transport 阶段超时的触发范围不同。本文按请求边界、错误链和连接阶段给出区分方法。344 收藏 -
Go HTTP 请求应把 context 超时绑定到 Request,并在拿到响应后关闭 Response.Body;循环调用时复用同一个 http.Client,让 Transport 有机会复用持久连接。395 收藏 -
Go HTTP 请求超时后仍占资源,通常不是 context 取消失效,而是请求、响应体、连接复用和业务 goroutine 的清理职责没有分开。本文用可执行示例说明正确的取消与关闭方式。172 收藏 -
Go time.After 只能返回接收通道。本文用单次所有者模式解释 NewTimer 与 context 取消、Stop 清理、同时就绪及 Go 1.23 语义差异。231 收藏 -
在重复等待场景中,time.After 适合一次性超时;需要复用和动态调整时,应持有 time.NewTimer 返回的 Timer,并按 Go 版本选择正确的 Reset 与清理方式。214 收藏 -
使用 Go runtime/metrics 读取 runnable、running、waiting 与 live goroutine 指标,区分近似值和总量,并用连续采样判断运行队列压力,避免把单次高点误判为泄漏或根因。306 收藏 -
Go time.Time 用 == 比较时,Location 和单调时钟读数也可能参与比较。本文按调用方需求区分 Equal 与结构体比较,处理时区、序列化和精度边界。252 收藏 -
Go time.Time 序列化后失去单调部分是设计如此:单调时钟只对当前进程有意义,JSON、Gob、二进制和文本序列化都会省略它。本文拆解比较、相等判断与耗时统计的正确边界。228 收藏 -
Go time.Time 的单调读数会影响比较与相减,== 还比较 Location 和完整表示。本文用 JSON 往返与时间索引示例,区分 Equal、进程内计时和 UTC 规范化键,并解释精度丢失的排查方法。215 收藏 -
Go 循环中直接 defer 会把关闭动作推迟到外层函数返回。本文用逐个处理文件的场景,说明如何缩短 defer 生命周期,并用命名返回值保留 Close 错误。475 收藏 -
Go defer 写在循环里时,关闭动作通常要等所在函数返回。本文用一个批量读取小工具说明资源为何积累,并给出局部函数、错误合并与退出边界的改写方式。186 收藏 -
Go 1.23 不能直接 range 结构体,但可以让结构体方法返回 iter.Seq 或 iter.Seq2,再用 range over function 逐项迭代。本文用完整示例说明 yield、提前停止、双值迭代器与 go.mod 版本要求。133 收藏 -
Go defer 属于所在函数,循环结束不会触发延迟关闭。本文以批量文件读取解释资源积累原因,给出单文件助手函数与错误合并写法,并说明作用域、闭包和退出方式的区别。132 收藏