Go问答技术文章
-
Go 1.21 引入的 log/slog 让结构化日志更容易落地,但字段从 slog.Any 到 Handler 再到 JSON 输出时,组、动态值和敏感字段仍有边界。本文用订单请求日志拆解字段流转、Handler 包装与脱敏验证。193 收藏 -
Go 泛型代码里,值类型约束明明包含目标类型,却可能无法调用指针接收者方法。本文用类型集、方法集和可运行示例拆开这个边界,并给出约束与调用方都能验收的写法。193 收藏 -
面对字段层级不固定、又不适合一次性读入内存的 JSON,Go 的 encoding/json.Decoder.Token 可以逐个读取语法令牌。本文用对象中嵌套数组的例子说明流式游标、json.Delim、dec.More 与提前结束时的错误边界。193 收藏 -
Go 私有模块报错时,GOPRIVATE、GOPROXY、GONOPROXY 与 GONOSUMDB 解决的不是同一件事。本文从实际生效配置、报错位置和企业代理场景拆分排查路径。193 收藏 -
解释 Go slog LevelVar 修改后旧 Handler 仍能生效的原因,比较动态 Leveler 与静态 slog.Level 快照,并给出配置和测试方法。193 收藏 -
Go 1.27 调整了 //line 与 /*line*/ 指令中相对文件名的解析基准。本文用生成代码场景说明目录基准、绝对路径、诊断核对和发布前检查,避免错误定位把锅甩给业务代码。192 收藏 -
Go 的 PathEscape 用于 URL 路径段,QueryEscape 用于查询参数值。两者对斜杠、加号和与号的处理不同,混用会导致路径层级变化或查询参数串位。本文用最小示例和 url.Values 说明选择方法。192 收藏 -
Scanner.Bytes 返回的是可能被下一次 Scan 覆盖的底层字节视图。本文解释前面行会变化的原因,并给出 string、bytes.Clone 和 bufio.Reader 的选择。192 收藏 -
Golang · Go问答 | 1个月前 | 并发 · 错误处理 · Context · Go问答 · Go 错误日志 超时 context.WithCancelCause context.Cause 取消原因
只记录 context.Err() 时,Go 服务通常只能看到 context canceled 或 deadline exceeded,无法判断是上游主动取消、下游超时还是业务熔断。本文用 context.WithCancelCause 和 context.Cause 传递可诊断的取消原因,并说明父子 Context、超时边界与日志落点。191 收藏 -
Go build tags 复杂组合容易把 AND、OR、文件名后缀和 cgo 条件混在一起。本文用布尔表达式、go list 文件集合和跨环境测试矩阵,说明如何验证每条 build tags 路径。191 收藏 -
用 Go net.Resolver 将 DNS 名称解析与 TCP 连接拆开检查,识别 DNSError、超时、端口拒绝和路由失败,建立一套可复用的网络故障定位方法。191 收藏 -
Go 私有模块下载出现 404 时,先判断请求落到了公共代理还是企业代理,再用 GOPRIVATE、GONOPROXY 和 GOPROXY 配置正确的下载边界。190 收藏 -
Go os/signal.Notify 向 channel 发送时不会阻塞,缓冲已满的通知可能被丢弃。本文按退出信号、多个信号和慢消费者三类场景说明容量选择、消费循环、NotifyContext 与可靠状态记录。190 收藏 -
Go 结构体复制 sync.Mutex 后可能出现解锁异常、竞态或保护失效。本文解释锁状态为何分裂,并用指针接收者、go vet -copylocks 和 -race 给出排查修复方法。189 收藏 -
Go runtime.SetFinalizer 遇到引用环时,垃圾回收无法安排满足依赖关系的终结顺序,终结器执行并不保证。本文用最小对象图说明原因,并给出断开回指、显式 Close 和可靠测试的处理方式。189 收藏