Go语言技术文章
-
Golang · Go教程 | 6天前 | 超时 · 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教程 | 6天前 | 日志 · 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 收藏 -
Go time.Time 写入 JSON 时,先用 In 固定业务时区,再按 RFC3339 或字段级自定义 MarshalJSON 输出稳定格式。351 收藏 -
Go 的 json.Decoder 面向 JSON 输入流,单次 Decode 成功不代表请求体已经结束。本文用第二次 Decode 严格要求 io.EOF,拒绝第二个 JSON 值、非法尾部字符和空请求体,并说明它与 DisallowUnknownFields、请求体大小限制的区别。312 收藏