Go问答技术文章
-
Go 1.23 及以上使用 slices.Collect 收集空 iter.Seq 时会得到 nil 切片。本文区分 nil 与非 nil 空切片、interface 包装和 JSON 输出,并给出稳定返回 [] 的处理方式。384 收藏 -
Go 里的 defer 绑定外围函数返回,不会在 for 的每轮迭代结束时自动执行。把 defer 放在长循环中处理文件、响应体或 Rows,可能让资源持续累积;本文给出抽函数、显式关闭和代码审查的取舍。232 收藏 -
Go 接口只有具体类型和值都为空时才等于 nil。本文用最小示例说明 typed nil 指针装进 error 或 any 后为何仍然非 nil,并给出返回、排查和 reflect 的稳妥写法。163 收藏 -
Go MultiWriter 在同次 Write 遇错时会停止后续目标。本文用双输出改造示例区分前置副作用、外层重复调用和缓冲延迟错误,并说明 Flush 与重试边界。310 收藏 -
Go 反射修改字段没有生效,通常是反射值不可设置、字段未导出或赋值类型不匹配。本文用 ValueOf、Elem、CanSet 和字段类型检查说明安全更新路径。101 收藏 -
Go gzip 生成文件无法解压,通常与 Writer.Close、底层文件关闭顺序或读取未到 EOF 有关。本文给出可靠写法和排查清单。488 收藏 -
Go archive/tar 遍历时目录条目的内容为空并不一定是读取失败:TypeDir 只描述目录,不携带可读正文。本文用 Header、Reader.Next、Reader.Read 和文件类型判断拆开这个误区,并给出安全的遍历与提取写法。255 收藏 -
Go 读取 ZIP 时,压缩包和内部条目各有独立的关闭对象。本文用局部函数、错误处理和数据来源对比,说明为什么打开条目后仍要显式关闭资源。197 收藏 -
Go heap 修改优先级后顺序不变,通常与未调用 Fix、修改副本或使用旧索引有关。本文用任务队列说明位置表、Swap 与 Pop 的职责及并发边界。461 收藏 -
Go sort 出现顺序不稳定时,问题可能来自 Less 不满足严格弱序,也可能只是 sort.Slice 没有承诺相等元素保序。本文用多字段、浮点和稳定排序示例拆开这两个边界。120 收藏 -
Go 的 URLEncoding 和 RawURLEncoding 使用同一套 URL-safe 字母表,但一个保留等号填充、一个去掉填充,因此不能随意交叉解码。本文从错误现象、协议边界和历史数据兼容三个角度说明如何选择编码器。209 收藏 -
Go crypto/rand 生成的是随机字节,不是随机字符。本文解释直接转 string、十六进制和 Base64 后长度为何不同,并给出带错误处理的固定长度随机字符串写法。291 收藏 -
Go binary 的整数解码应遵循协议字节序,而不是本机端序。通过固定字节与八字节头部示例说明字段宽度、偏移和完整读取,区分短读与端序错误,并解释编码回环为何不等于协议互通。122 收藏 -
Go RawMessage 二次解析后字段为空,通常要从原始字节、外层 JSON 标签、目标结构体指针和类型匹配四处排查。本文给出动态载荷的定位清单与可复用写法。321 收藏 -
Go multipart 上传文件读到空内容,常见原因是字段名或 boundary 不匹配、请求体被提前消费、文件流已经位于 EOF。本文用 FormFile 与 MultipartReader 说明如何按证据定位并修复。156 收藏