Go语言技术文章
-
通过包装Go RoundTripper,在独立Header副本中注入Context追踪标识,保留底层响应与错误,并明确并发、Body和重定向目的端的处理边界。291 收藏 -
Go 循环里反复调用 time.After 是否需要改成 Timer?本文按单次超时、可复用等待和固定周期三种工作流给出选择,并说明 Go 1.23 之后的计时器回收与旧版本兼容写法。291 收藏 -
Go crypto/rand 生成的是随机字节,不是随机字符。本文解释直接转 string、十六进制和 Base64 后长度为何不同,并给出带错误处理的固定长度随机字符串写法。291 收藏 -
Go HTTP/2 的 MaxConcurrentStreams 限制的是单条连接的并发流,不是所有连接共享的服务总并发。本文说明 Server.HTTP2 的配置方式、跨连接边界以及上线检查清单。291 收藏 -
Go GOPROXY 返回 404 不一定说明版本写错,也可能是当前代理没有该模块或回退链没有按预期生效。本文按配置、版本列表和代理协议请求逐层判断原因。291 收藏 -
Go x/net/proxy.FromEnvironment 默认把 Direct 作为底层拨号器。本文拆开环境代理、NO_PROXY 与 forward 的关系,说明为什么需要 FromEnvironmentUsing 传入带超时、绑定参数或测试替身的备用拨号器。291 收藏 -
用一个可复用的 http.Client 处理 Transport、重定向、Cookie 和 Timeout 四类可选配置,先看零值行为,再按失败边界设置策略和资源回收。291 收藏 -
围绕 io.CopyBuffer 复制大文件时的额外分配与空结果现象,拆解 nil 缓冲区、WriterTo/ReaderFrom 快速路径、目标扩容、written 与 err 的判断,以及并发复用缓冲区的生命周期边界。291 收藏 -
Connect Go 的 connectinprocess transport 可以把 RPC 直接分派到同进程的 connect.Server,不监听端口也能覆盖客户端、服务端拦截器、请求响应复制和错误语义。本文给出测试构造方式,并说明流式背压和仍需真实 HTTP 测试的边界。291 收藏 -
Go 模块拆分后出现 ambiguous import,通常是父模块和拆分子模块同时提供同一个包路径。本文用模块图、版本配套升级与 replace 过渡说明迁移处理方式。290 收藏 -
Go HTTP 客户端重试后请求体变空,通常不是服务端随机丢数据,而是复用了已经读过的 Body。本文用 GetBody 和字节快照定位并修复请求体重放问题。290 收藏 -
用 Go 的 os.ReadDir 读取目录后,如何按目录、普通文件和其他类型筛选?本文从 DirEntry 的 IsDir、Type、Info 讲起,并说明目录级错误、单项 Info 错误和大目录分批读取的处理方式。290 收藏 -
Go 下载依赖卡在 sum.golang.org 时,先区分模块代理和校验数据库的网络边界,再按公共模块、私有模块或内网代理选择 GOPROXY、GOSUMDB、GOPRIVATE 与 GONOSUMDB,避免用全局关闭校验掩盖配置问题。290 收藏 -
Go 的 time.Timer.Stop 返回值表示定时器是否被成功停止,不等于 t.C 是否发生过接收。本文用取消、超时和并发收尾示例区分这两个事实,并说明 Go 1.23 之后的通道语义。290 收藏 -
Go context.WithValue 取不到值,通常不是 Context 自己丢了数据,而是写入和读取使用了不同的键类型、键值或 Context,或者取值后的类型断言不匹配。本文按这四个边界给出排查与封装方法。290 收藏