Go语言技术文章
-
Go 1.21 的 log/slog 提供了 NewLogLogger,把旧式 log.Logger 的 Output 调用桥接到结构化 Handler。本文用 HTTP 服务迁移场景说明级别映射、属性保留、前缀与迁移边界,并给出可回归的日志核对方法。398 收藏 -
time.Ticker.Stop 之后是否还能从 C 通道读到一次事件,取决于 Go 版本、go.mod 语义和退出代码的写法。本文用一个定时刷新任务拆解 Stop 不关闭通道、select 退出、Go 1.23 同步 ticker 通道以及旧版本兼容边界。355 收藏 -
解释 Go http.Request.GetBody 的生成条件,区分可重读请求与流式请求,并给出重试、内存控制和上传场景的检查方法。431 收藏 -
解释 Go context 取消后 goroutine 仍可能继续工作的原因,给出 select 监听、资源释放、退出确认和可复现检查方法。389 收藏 -
用 Go 的 http.Server.ConnState 观察连接从建立、活跃、空闲到关闭的状态变化,并结合超时和异常断开日志定位连接问题。425 收藏 -
Golang · Go问答 | 4天前 | 并发 · 错误处理 · Context · Go问答 · 服务排查 · Go 错误日志 超时 context.WithCancelCause context.Cause 取消原因
只记录 context.Err() 时,Go 服务通常只能看到 context canceled 或 deadline exceeded,无法判断是上游主动取消、下游超时还是业务熔断。本文用 context.WithCancelCause 和 context.Cause 传递可诊断的取消原因,并说明父子 Context、超时边界与日志落点。191 收藏 -
Go 1.21 引入的一次性值函数适合把一次性计算封装成并发安全的惰性值。本文从配置快照加载场景出发,说明它的最小写法、panic 语义、错误值处理、旧版本兼容和上线前检查边界。314 收藏 -
用一个可运行的 Go 示例拆开 reflect.Value 的 CanSet、CanInterface 和 MethodByName 边界,说明什么时候会 panic,以及如何在反射入口先做类型、有效性和可导出性检查。407 收藏 -
Go 1.21 引入的 clear 可以把切片元素重置为类型零值,尤其适合切断指针切片和含引用字段的对象链。本文从数组范围、别名切片和旧工具链兼容三个边界说明它怎么用、哪里容易清错。213 收藏 -
解释 Go runtime.SetFinalizer 为什么不是可靠的资源释放器,结合对象可达性、GC 时机、终结器链和 Close 设计给出可验证的使用边界。362 收藏 -
Go 1.23 的 unique.Handle 可以为可比较值建立全局唯一句柄,适合把重复的不可变配置或标识压缩成便宜的句柄比较。本文从最小示例出发,核对类型约束、Value 的浅拷贝语义、句柄生命周期和缓存命中边界。475 收藏 -
Go 1.25 新增的 sync.WaitGroup.Go 把 goroutine 启动与计数绑定起来。本文用批量任务示例讲清启动时序、Wait 边界、panic 约束和异常收口方式。434 收藏 -
Go 标准库的一次性初始化函数适合把昂贵且只需执行一次的结果封装成并发安全调用。本文从配置加载和失败传播两个场景入手,演示最小写法、panic 语义、Go 版本边界和测试方法。337 收藏 -
Go 的 sync.Cond 适合让 goroutine 等待一个由共享状态表达的条件。本文用一个有界任务队列拆开 Wait、Signal 与 Broadcast 的正确顺序,并补上退出、空队列和误唤醒后的核对方法。105 收藏 -
Go slog.LevelVar 适合把日志级别做成可并发更新的运行时开关。本文用一个 HTTP 管理入口演示 LevelVar、Handler 与回滚配置的配合,重点核对动态生效、并发读取和错误配置不污染当前级别。255 收藏