Go问答技术文章
-
Golang · Go问答 | 1小时前 | 标准库 · 测试 · 环境变量 · Go问答 · 排错 · 环境变量 Go 并行测试 Go test 测试隔离 Go升级 testing.T.Setenv
Go 版本升级后如果 testing.T.Setenv 的结果看起来变了,先核对 Go 版本契约,再排查 t.Parallel、子测试祖先和环境变量读取时机。本文比较三条定位路径,并给出可直接复现的最小测试与修复选择。377 收藏 -
围绕 Go encoding/xml.Decoder.Token 讲清混合内容的事件读取、元素栈、文本拼接与错误边界,给出可直接改造的流式解析示例。376 收藏 -
解释Go模块checksum mismatch的含义,按项目记录、缓存、代理和版本改写定位差异,提供独立缓存诊断命令,并说明删除go.sum或关闭认证为何不能代替修复。376 收藏 -
Go multipart 解析报 boundary 缺失,通常是 Content-Type 只有 multipart/form-data 却没有 boundary 参数。本文从客户端组包、请求头和服务端解析三个位置排查,并给出 FormFile、ParseMultipartForm 与流式 MultipartReader 的正确用法。376 收藏 -
Go debug/dwarf LineReader可在无行表时返回nil且无错误。本文说明编译单元输入要求、三种返回状态及Next的EOF处理,避免空指针和调试信息误判。376 收藏 -
Gonum 的 BellmanFordFrom 用 ok=false 报告负环,而不是返回 error。本文说明如何检查全局失败信号、用 Shortest.To 和 -Inf 定位受影响节点,并把诊断结果与正常最短路严格分开。376 收藏 -
Go json.Decoder 可能在 Decode 时提前读取底层 Reader。本文用 Buffered、io.MultiReader 和边界检查,把尚未消费的字节安全交给后续流式解析。376 收藏 -
Go 接口字段经常变化时,按稳定字段、未知字段和动态内核选择结构体、map 或 json.RawMessage,避免类型断言扩散。375 收藏 -
Go 的 build tag 不是只作用于测试文件。本文拆开构建约束、_test.go 后缀和 go test 文件选择规则,给出用 go list 与 go test 定位测试覆盖问题的方法。375 收藏 -
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 普通 map 发生并发读写时可能直接触发 concurrent map read and map write。本文按排障顺序说明如何确认写入边界、用 RWMutex 修复,以及什么时候才适合换成 sync.Map。375 收藏 -
Go select 中多个 case 同时就绪时,不按源码顺序固定选择,而是在可继续的通信中做均匀伪随机选择。本文说明怎样识别最终分支、区分表达式求值与通信执行,并处理 default、nil 和 closed channel 的边界。375 收藏 -
Go atomic.Int32 适合保存一个可原子读取和更新的 int32 状态。本文用有限状态示例说明 CompareAndSwap 的 expected、next 与 bool 返回值怎样配合,解释 CAS 失败、状态回退、结构体复制和多字段一致性等边界。375 收藏