Go问答技术文章
-
Go sync.Cond Broadcast 唤醒所有等待者,但不保证条件仍然成立。本文用任务队列说明如何用同一把锁保护状态、用 for 循环检查条件,并排查看似丢失唤醒的问题。377 收藏 -
Go 反射中直接调用 reflect.Value.Elem 可能因 zero Value、nil interface 或错误 Kind 触发 panic。本文用 IsValid 与 Kind 建立安全解引用边界,并给出可复用的错误返回写法。377 收藏 -
围绕 Go encoding/xml.Decoder.Token 讲清混合内容的事件读取、元素栈、文本拼接与错误边界,给出可直接改造的流式解析示例。376 收藏 -
Go 程序在精简容器中调用 time.LoadLocation 报 unknown time zone,通常是镜像没有 IANA 时区数据。本文按查找顺序解释根因,并比较安装 tzdata、嵌入 time/tzdata 与显式加载数据的取舍。375 收藏 -
Go 并行子测试要在各自的回调里调用 testing.T.TempDir,让每个用例获得独立且自动清理的目录;父测试提前创建目录再传递会造成共享写入。本文说明目录隔离、并行等待、清理边界和排查清单。375 收藏 -
Go 文件遍历中不要直接比较 fs.FileMode 的完整整数。本文用 IsDir、IsRegular、Type 和 ModeType 组织一套兼容判断,并说明 DirEntry.Type 为零时为什么还要回退到 Info。375 收藏 -
本文从 go/types.Info.InitOrder 出发,说明 Go 如何整理包级变量初始化项,并用 AST 与类型检查代码读取 Lhs、Rhs,区分 init 函数、跨包顺序和隐藏依赖。374 收藏 -
讲清 Go errors.Join 组合错误的树形关系,以及如何用 errors.Is 和 errors.As 保留单项错误匹配、类型提取和边界判断能力。374 收藏 -
Go archive/zip 的 Reader.Open 使用 io/fs 的正斜杠路径语义。本文说明反斜杠导致找不到条目的原因,并给出规范路径访问、原始名称精确匹配和 ErrInsecurePath 处理方案。374 收藏 -
Go gob 的接口字段会携带动态具体类型名称,接收端必须预先知道该名称对应的本地类型。本文说明 Register、RegisterName、指针类型与跨进程注册表的正确用法。374 收藏 -
Golang · Go问答 | 1天前 | 标准库 · Context · 并发编程 · go语言 · 错误排查 · 后台任务 Deadline context取消 context.WithoutCancel Go排查
context.WithoutCancel 本身不会返回 Deadline,但后台任务仍可能从新派生的 WithTimeout 或误用的原始请求 Context 获得时间边界。本文用最小探针定位来源,并给出保留上下文值、脱离请求取消且仍可回收的写法。374 收藏 -
Go 的 JSON 结构体解码默认会忽略未知字段。本文用 json.Decoder 的 DisallowUnknownFields 配置严格检查,并说明兼容旧客户端、区分类型错误与未知字段错误的落地方法。373 收藏 -
Go 字符串按字节截断后出现替换符,通常是切进了 UTF-8 多字节序列。本文解释 U+FFFD 的来源,并分别给出安全字节截断、rune 截断和更高层字符边界的判断方法。372 收藏 -
短任务已经返回并不代表 goroutine 已退出。本文用 goroutineleak 和 pprof 拆解结果发送、提前返回、取消与排空之间的生命周期关系,给出可落地的修复清单。372 收藏 -
围绕 Go encoding/gob 长连接复用场景,说明连接级 Encoder 与 Decoder 的正确用法、并发写入限制、错误恢复和必须重新创建编解码器的边界。371 收藏