Go语言技术文章
-
Golang · Go问答 | 9小时前 | net/http · HTTP客户端 · Go问答 · Go net/http gzip Transport.DisableCompression Accept-Encoding 响应解压
Go 的 Transport.DisableCompression 只控制是否自动添加 Accept-Encoding: gzip;自动请求的 gzip 响应会被透明解压,而用户显式请求 gzip 时仍需自己处理压缩 Body。318 收藏 -
Go HTTP 服务可以通过 Server.ConnContext 为新连接创建带元数据的上下文,后续请求从 r.Context() 继承读取。本文用连接追踪标识演示配置方式,并比较 BaseContext、ConnContext 与请求级 WithContext 的边界,说明 HTTP/2 并发和资源清理时的注意事项。313 收藏 -
Go embed.FS 提供内嵌文件树,但文件系统根和 HTTP 公开前缀是两层路径。本文用 fs.Sub、http.FS、http.FileServer 与 StripPrefix,把 web/index.html 稳定挂到 /assets/index.html,并说明尾斜杠、目录索引和暴露边界。312 收藏 -
reflect.TypeFor 读取的是泛型参数代表的静态类型,reflect.TypeOf 读取的是值装入接口后的动态类型。本文用接口、指针接口和 Elem 的对照说明两者的差异与选择方法。311 收藏 -
用 Go 标准库 httptrace.ClientTrace.GotConn 观察 HTTP 客户端请求拿到的连接,解释 Reused、WasIdle 与 IdleTime 的区别,并给出安全记录日志的最小写法和边界。311 收藏 -
Go testing.T.Cleanup 会在测试及其子测试完成后执行已注册回调,并按后注册先执行的顺序收尾。本文用资源依赖和子测试作用域说明怎样安排注册顺序,避免测试夹具提前失效。309 收藏 -
Go sync.Map.LoadOrStore 返回的 actual 是最终值,loaded 则说明这个值来自已有条目还是本次存入。本文结合空键、已存在键和并发竞争,说明如何用 loaded 判断初始化责任,避免把候选值误当成缓存结果。308 收藏 -
用 Go 的 io.LimitedReader 控制流式读取上限,说明 N、n、EOF 与底层输入的关系,并给出读取固定片段和继续处理剩余数据的实用写法。307 收藏 -
maps.Clone 只复制 map 的第一层键和值。本文用切片、map、指针和结构体示例拆开嵌套引用边界,并给出需要独立状态时的深复制写法与检查清单。306 收藏 -
unsafe.Slice 的 len 参数决定返回切片的长度和容量,计算时若混用元素数与字节数,或发生整数溢出,就可能把访问范围带出原始对象。本文按指针来源、Sizeof 换算、nil 特例和边界测试逐步定位并修正。298 收藏 -
Go hex.Dumper 的 Write 可能在输出行头、字节区或整行收尾时遇到底层 Writer 错误,而不足 16 字节的尾行要等 Close 才补齐。本文给出保留首个错误、正确处理 Close 并明确资源关闭责任的写法。297 收藏 -
runtime/secret.Do 通过编译器与运行时协作,减少机密数据在寄存器、栈和堆上的残留,但它不把普通优化结果变成语言规范保证。本文梳理两者的职责边界、返回值设计和兼容限制。292 收藏 -
Go net/http 中,ReadHeaderTimeout 只限制请求头,读取请求体要用 ReadTimeout 或按请求设置 ResponseController.SetReadDeadline。本文给出慢上传、超大请求、客户端断开和 HTTP/1.1 连接关闭的处理方式。290 收藏 -
Go pem.Decode 找不到下一个 PEM 块时会返回 nil,并把未找到块的整段输入原样放到 rest。本文说明这种设计如何作为终止信号,并给出连续读取多个 PEM 块时避免重复处理和死循环的写法。288 收藏 -
io.LimitedReader 在额度用完和底层输入结束时都可能返回 EOF,单看错误值无法判断是否超限。本文用 limit+1 探测解释如何区分恰好读满、未达到上限和仍有额外数据,并给出保留内容与纯探测两种写法。286 收藏