Go问答技术文章
-
把 time.After 放进高频循环,短时间内不断创建定时器,任务退出时还可能留下难以观察的等待路径。本文从一个轮询超时场景出发,拆解定时器创建、触发、退出和验证边界,并给出可回收的 time.NewTimer 写法。179 收藏 -
Go 里读到 io.EOF 不等于所有 Reader 都永久失效。本文用 bytes.Buffer、文件和分块读取场景拆开 EOF 的含义,说明缓冲区复用时该看什么状态,以及如何避免把 EOF 当成普通错误。179 收藏 -
解释 Go sync.Pool 的临时对象复用边界,说明 GC 为什么可以清空池、为什么不能拿它保存业务数据,并给出清理与并发核对方法。178 收藏 -
Go 1.21 给 bytes.Buffer 增加 Available 和 AvailableBuffer 后,如何判断可写余量、避免误解短写,并用 Cap 和 Len 验证扩容结果。178 收藏 -
Golang · Go问答 | 3天前 | go · Context · net/http · Go context取消 http.NewRequestWithContext Request.WithContext
http.NewRequestWithContext 与 Request.WithContext 都能把 context 交给 Go HTTP 请求,但创建时绑定、浅拷贝语义和请求体复用边界并不一样。本文用可运行示例拆开取消责任、Clone 深拷贝和常见误区。177 收藏 -
Golang · Go问答 | 1星期前 | 并发 · golang · HTTP · Context · Go问答 · 资源释放 context.Context 请求取消 Go问答 ctx.Done Go HTTP
Go 服务发布或重启时,http.Server.Shutdown 可以停止接收新连接并等待在途请求。本文说明优雅退出的调用顺序、超时边界、后台任务隔离和验收方式。176 收藏 -
用 sync.Pool 复用 bytes.Buffer 可以减少短生命周期对象的分配,但必须处理 Reset、取出类型和跨请求数据污染问题。本文从一次响应体串数据的故障现场出发,给出可验证的实现、边界和复查方式。173 收藏 -
Go 泛型 API 不必先把参数塞进 interface{} 再做类型断言。comparable 负责可比较类型,~T 负责接收底层类型相同的自定义类型;约束只写调用方和函数体真正需要的能力,API 才不会被过度收窄。173 收藏 -
Go 泛型函数一旦把参数收窄成 any,就会失去编译期可用的类型信息。本文从一个可复用的过滤函数出发,对比 any、类型断言和泛型约束的边界,并给出选择建议。173 收藏 -
Golang · Go问答 | 5天前 | 并发 · net/http · HTTP客户端 · Go问答 · 请求重试 · Go header 请求体 http.Request.Clone WithContext HTTP重试
http.Request.Clone 和 WithContext 都能生成带新上下文的请求,但它们对 Header、URL、Body 和并发使用的约束不同。本文用一次 HTTP 重试场景拆开两者的复制边界,给出安全写法和验收检查。173 收藏 -
Go 1.27 新增实验性的 simd 与 archsimd 包,但实验性 API、目标架构和可移植性都决定了它不能按普通标准库功能直接上线。本文按调用边界、构建条件和回退策略说明如何判断。173 收藏 -
Go 接口升级时,既要识别未知字段避免拼写错误,又要保留新字段以兼容旧客户端。本文用 Decoder、DisallowUnknownFields 和 json.RawMessage 拆开这条边界。170 收藏 -
netip.ParseAddr 失败时返回的是无效 Addr 和可诊断的错误,不能只靠 Addr{} 判断输入问题。本文用最小 Go 示例拆开 IPv4、IPv6、空字符串和带区域标识的边界,并给出服务端校验时可复用的判断顺序。170 收藏 -
bufio.Reader.Peek 返回的是内部缓冲区视图,下一次读操作后就可能失效。本文用一个协议头判断场景说明 Peek、Read、copy 和 ErrBufferFull 的边界。169 收藏 -
Go 测试里 t.Setenv 会修改整个进程的环境变量,并在测试清理阶段恢复原值,因此不能和 t.Parallel 或并行祖先一起使用。本文从失败现象、执行时间线和可复现代码出发,说明如何拆分测试、验证恢复结果,并处理需要并发覆盖的配置场景。168 收藏