Go语言技术文章
-
用 Go httptrace 拆分 DNS、TCP/TLS、连接复用、写请求和首字节耗时,配合完整示例定位 HTTP 客户端慢在解析、建连还是服务端等待。364 收藏 -
Go 的 url.Values 会在 Encode 阶段统一转义查询参数。本文从重复编码现象出发,说明如何保留原始值、处理已有查询、识别外部已编码输入,并区分查询参数与路径转义。147 收藏 -
Golang · Go教程 | 3天前 | 超时 · go · 性能 · HTTP客户端 · Go net/http HTTP超时 http.Transport ResponseHeaderTimeout
Go http.Transport 的 ResponseHeaderTimeout 只限制请求写完后等待响应头的时间,不包含响应体读取。本文拆分连接、TLS、响应头和整体请求四个阶段,给出复用 Transport 的配置方式与排障边界。133 收藏 -
Go http.Client 可以在 CheckRedirect 中读取 via 请求链并设置跳转上限。本文区分重定向次数与请求总数,说明普通错误和 http.ErrUseLastResponse 对 Response、Body 和 url.Error 的不同影响。484 收藏 -
Go接口如何限制请求体字节数?通过MaxBytesReader改造读取边界,区分413与400,说明JSON尾部、上传与回归用例的处理。444 收藏 -
Golang · Go教程 | 3天前 | 日志 · HTTP · go · Context · slog · 可观测性 · Go context.Context 结构化日志 请求日志 log/slog slog.Logger
Go 的 log/slog 不会把 context.Context 中的值自动变成日志字段。更稳妥的做法是在 HTTP 入口用 Logger.With 固定 request_id、method、path 等请求属性,再把 context.Context 和这个 Logger 显式传给下游,并在需要时使用 InfoContext 或 LogAttrs。136 收藏 -
用 slog.Handler 的 ReplaceAttr 把日志脱敏集中到处理器出口,覆盖顶层字段、分组字段、删除属性和测试验证边界。419 收藏 -
Go 用 fmt.Errorf 增加错误上下文时,应使用 %w 保留底层错误链,再交给 errors.Is 或 errors.As 判断;本文从常见误区出发,说明 %v 与 %w、单层和多层包装、nil 边界以及服务层返回约定。136 收藏 -
从批量校验场景出发,说明 Go errors.Join 如何保留多个失败原因、怎样通过 errors.Is 和 Unwrap() []error 遍历错误树,以及它与 errors.Unwrap 的边界。475 收藏 -
Go 接口非空却断言出空指针怎么办?区分空接口、类型匹配和具体指针非空,给出双返回值断言、返回端空值处理及反射的适用边界,避免把类型错误当成对象缺失。148 收藏 -
Go 泛型函数把类型参数放进 map[K]V 时,应使用 K comparable 表达键的比较边界。本文用可复用查找函数说明字符串、整数和结构体键的适用范围,并区分 comparable 与排序、加法、业务方法约束。140 收藏 -
用一个可复用的泛型小工具说明 Go 如何通过类型集合限制底层类型,并区分精确类型、近似底层类型、方法约束与 comparable 的使用边界。158 收藏 -
Go 自定义类型实现 encoding.TextMarshaler 后,可以用 MarshalText 统一输出 UTF-8 文本,并被部分标准编码包复用。本文从接口目标、接收者选择、错误边界和 JSON/XML 调用方讲清实现方式,再补上 TextUnmarshaler 的可逆设计。435 收藏 -
Go slices.SortFunc 的多字段排序关键是让比较器按优先级、时间和名称逐层比较,并在每层不相等时立即返回。本文给出最小写法、降序字段处理、相等元素稳定性和比较器检查方法。469 收藏 -
Go 的 time.LoadLocation 返回 unknown time zone 时,先区分名称拼写问题与运行环境缺少 IANA 时区数据库,再按宿主机、容器和精简镜像选择修复方式。本文给出保留错误、加载嵌入时区数据和安全回退到 UTC 的实用写法。196 收藏