Go教程技术文章
-
用 Go log/slog 自定义 Handler,为健康检查、普通请求和故障请求设置不同日志门槛,同时保留 request_id 等关键上下文,避免线上日志降噪后失去排查线索。500 收藏 -
errors.Join 可以把一次流程中的多条错误组成可检查的错误树,但日志展示、errors.Is 匹配和 errors.As 提取要分开设计。本文用批量校验示例说明组合、判断、展示与测试边界。301 收藏 -
Go 泛型约束不是把类型随便放进尖括号,而是用类型集合明确允许哪些类型,并把可比较、可排序等操作边界交给编译器检查。本文用可比较键和值排序两个例子说明约束写法、~ 底层类型和常见误区。111 收藏 -
Go 1.26 放宽了 new 的参数限制,可以直接用 new(expr) 创建带初始值的指针。本文用可选字段、版本门槛和迁移验证说明它解决什么问题,以及什么时候不该急着改写。476 收藏 -
用一个配置加载器看懂 Go 一次性初始化的惰性加载、错误复用和并发安全边界,给出可验证的最小实现与避坑清单。125 收藏 -
Go 泛型约束不只是列出可参与运算的类型,还能通过接口嵌入和方法集限制调用者。本文用一个可编译示例拆开类型集、方法集与指针接收者的边界。235 收藏 -
Go 泛型约束中的 ~ 不是装饰符,而是把底层类型纳入类型集的边界工具。本文从一个可复现的金额类型例子出发,区分精确类型、底层类型和接口约束,给出编译器核对方法与选型清单。241 收藏 -
在泛型函数里拿到 T 的 reflect.Type,不必再构造一个可能带副作用的零值,也不要把接口动态类型误当成泛型参数。本文用 reflect.TypeFor[T]() 对比旧写法,说明指针、接口和 nil 的边界,并给出可验证的类型检查代码。494 收藏 -
调用 time.Ticker.Stop 后,程序仍可能处理一次已经进入通道的时间值。关键不在于 Stop 会不会清空通道,而在于退出信号、通道消费和任务收尾的顺序。本文用可运行示例拆开这个边界。363 收藏 -
用一个分页读取场景说明 Go 1.23 range over function 的提前停止语义,拆开 yield 返回 false、错误保存和调用方收尾之间的边界,给出可运行的 iter.Seq 示例与验收方法。497 收藏 -
Golang · Go教程 | 5天前 | HTTP · go · 连接池 · 性能排查 · net/http · http.server 连接泄漏 Go ConnState StateIdle HTTP长连接
用 http.Server.ConnState 观察 Go HTTP 连接从 StateNew 到 StateClosed 的状态变化,区分慢请求、Keep-Alive 和未收尾连接,并给出计数、超时与复核方法。125 收藏 -
Go 1.21 引入的 clear 内置函数适合批量清空 map,但它并不等于释放底层容量。本文用缓存复用、重新分配和基准测试说明三种清理策略的边界。134 收藏 -
Go 1.24 为 encoding/json 增加 omitzero。本文用 time.Time、自定义 IsZero、指针和切片示例,拆清它与 omitempty 的判断边界,并给出兼容迁移和测试清单。321 收藏 -
Go 的 log/slog 可以把日志级别过滤交给 HandlerOptions,但固定 Level 与可动态调整的 LevelVar 适用场景不同。本文用 JSONHandler、测试缓冲区和最小示例说明过滤发生在哪里,以及如何验证 DEBUG 是否真的被挡住。228 收藏 -
用 log/slog 给请求日志补 request_id 时,WithAttrs 适合固定上下文,Handler 包装适合动态注入。本文用一段可运行示例说明两者的边界、并发安全和验收方法。147 收藏