Go问答技术文章
-
database/sql 的 Scan 只会处理文档列出的常见目标类型或 Scanner。本文用自定义金额结构体构造最小复现,再通过 Scanner 处理 int64、[]byte 和 NULL,定位并修复类型转换错误。283 收藏 -
Golang · Go问答 | 4星期前 | 标准库 · 错误处理 · Go问答 · Go encoding/hex DecodeString InvalidByteError ErrLength 十六进制解码
Go 的 hex.DecodeString 失败时,先用 ErrLength 区分奇数长度,再用 InvalidByteError 识别非法字符,最后扫描原始输入得到字节偏移,并用脱敏日志保留可操作的排障信息。282 收藏 -
讲清 Go netip.AddrFromSlice 对 4 字节、16 字节和非法长度的处理,并说明 IPv4-mapped IPv6、Is4In6 与 Unmap 的转换边界。282 收藏 -
Go HTTP 客户端连接复用异常时,先检查 resp.Body 是否读到 EOF 并及时关闭,再用 httptrace.GotConn 的 Reused 字段观察 Transport 是否复用了连接。本文给出集中式读取模板、状态码场景和异常边界。282 收藏 -
Go net/http Request.MultipartReader 适合把 multipart/form-data 请求按 Part 流式读取,避免 ParseMultipartForm 为大文件建立完整表单结构。本文说明文件与普通字段的分流、整体请求上限、单文件超限判断和错误清理。282 收藏 -
Go go-audio/wav 的 Encoder.Close 会回写 RIFF 与 PCM data 长度,因此输出必须支持 io.WriteSeeker。本文用 os.File 示例说明 Write、Close 和底层文件关闭的正确顺序,并比较内存与管道输出的边界。282 收藏 -
bytes.Buffer.String 返回调用时未读部分的字符串,后续 Write、Read、Reset 不会修改已经取出的 string。本文对比 String、Bytes 和 strings.Builder 的内容范围、生命周期与适用边界。282 收藏 -
开启 Go csv.Reader.ReuseRecord 后,直接保存 Read 返回的 []string 可能让旧行随下一次读取变化。本文解释切片 backing array 与字段字符串的区别,并给出保存前复制记录的写法。282 收藏 -
Go csv.Reader 可以读取没有末尾换行符的 CSV 最后一条记录。本文用逐条 Read 和 ReadAll 说明 record、io.EOF、InputOffset、字段数错误与解析错误的边界,避免导入时漏掉尾行。282 收藏 -
sync.Map 不是普通 map 的默认替代品。本文从访问模式、类型安全、复合更新和遍历语义四个角度,说明什么时候适合使用 sync.Map,什么时候应保留 map 配合 Mutex 或 RWMutex。281 收藏 -
Go 调整 GOGC 后暂停时间没有明显变化,通常不是参数没用,而是 GOGC 只改变目标堆大小和 GC 频率,单次暂停还可能受根扫描、调度停顿、GC assist 与分配突增影响。本文按证据拆分根因并给出修复边界。280 收藏 -
Go 的 slice 不能直接作为 map key,因为 slice 不支持完整的 == 比较。本文用 string、定长数组和可比较 struct 给出按内容与复合条件建索引的替代方案,并说明 any、泛型和长度边界。280 收藏 -
Go gzip 读取报校验错误时,部分明文不能直接使用。本文用完整文件读取示例区分校验不匹配、截断和其他错误,说明暂存提交、Close 与资源限制的边界。280 收藏 -
webdav.Dir 接收的是本机文件系统根目录,而 WebDAV FileSystem 方法接收的是用斜杠分隔的逻辑资源名。本文说明两种路径的边界,并提醒 Dir 不会自动阻止目录内符号链接指向树外。280 收藏 -
Go 测试本机通过而 CI 失败,通常是工具链、模块目录、构建条件或运行资源不同。本文用环境摘要、关闭缓存、结构化日志和测试门禁,把模糊失败变成可复现、可对比的问题。279 收藏