Go问答技术文章
-
Go 变量仍在作用域不等于对象仍然可达:函数参数或接收者可在最后一次提及后失去活性,weak.Pointer.Value 随后可能返回 nil。本文还原根因,并给出强所有者与 runtime.KeepAlive 的正确放置方式。195 收藏 -
json.Decoder.Decode 返回 nil 只说明成功读取了下一个 JSON 值,并不保证输入流已结束。本文用二次 Decode 与 io.EOF 检查,区分空白结尾、第二个 JSON 值和非法尾随字节。194 收藏 -
Go 进程内的反射缓存应优先直接使用 reflect.Type 做键,因为 Type 可比较并表示精确类型身份,而 Type.String 与名称并不保证唯一。本文从错误命中复盘出发,说明指针归一化、泛型实例、匿名类型及跨进程模式键的取舍。194 收藏 -
Go 私有模块报错时,GOPRIVATE、GOPROXY、GONOPROXY 与 GONOSUMDB 解决的不是同一件事。本文从实际生效配置、报错位置和企业代理场景拆分排查路径。193 收藏 -
解释 Go slog LevelVar 修改后旧 Handler 仍能生效的原因,比较动态 Leveler 与静态 slog.Level 快照,并给出配置和测试方法。193 收藏 -
Golang · Go问答 | 16小时前 | 依赖管理 · go · go work sync go work vendor Go workspace inconsistent vendoring Go依赖同步
Go 多模块工作区出现 inconsistent vendoring 时,关键不是手改 vendor/modules.txt,而是先确认 GOWORK 和 use 范围,再同步工作区构建列表、整理模块依赖并重建 workspace vendor。本文给出可复用的排查、同步和 CI 验证步骤。192 收藏 -
同一个无时区日期在不同机器上出现一天偏移,通常不是日期字符串变了,而是解析位置没有明确。本文从 time.Parse 的 UTC 默认行为出发,说明 time.ParseInLocation 如何绑定 Location,并处理显式偏移、时区缩写、IANA 时区加载和夏令时边界。192 收藏 -
用 Go net.Resolver 将 DNS 名称解析与 TCP 连接拆开检查,识别 DNSError、超时、端口拒绝和路由失败,建立一套可复用的网络故障定位方法。191 收藏 -
Ticker.Reset 要求间隔严格大于零,零值或负值会直接 panic;动态配置应先解析并校验,停用周期任务则使用 Stop,并在 select 中配合 nil channel。191 收藏 -
Go os/signal.Notify 向 channel 发送时不会阻塞,缓冲已满的通知可能被丢弃。本文按退出信号、多个信号和慢消费者三类场景说明容量选择、消费循环、NotifyContext 与可靠状态记录。190 收藏 -
Go 结构体复制 sync.Mutex 后可能出现解锁异常、竞态或保护失效。本文解释锁状态为何分裂,并用指针接收者、go vet -copylocks 和 -race 给出排查修复方法。189 收藏 -
Go runtime.SetFinalizer 遇到引用环时,垃圾回收无法安排满足依赖关系的终结顺序,终结器执行并不保证。本文用最小对象图说明原因,并给出断开回指、显式 Close 和可靠测试的处理方式。189 收藏 -
Go image.Decode 返回 image: unknown format,通常是 JPEG 或 PNG codec 没有注册。本文解释空白导入触发 init 注册的原因,并比较通用解码、专用解码与 DecodeConfig 的适用边界。189 收藏 -
Go 中可寻址的值能调用指针接收者方法,是编译器对方法调用做了隐式取地址;接口实现仍严格取决于静态类型的方法集。本文用最小示例解释 T 与 *T 的差异,并给出赋值、API 设计和编译期断言的修复建议。189 收藏 -
Go 的 omitempty 在 encoding/json v1 中不会把值结构体当作空值。本文拆解零值判定规则,并对比指针、omitzero、IsZero 与自定义编码方案。189 收藏