Go问答技术文章
-
go list 在 replace 场景下显示的模块路径与本地目录不一致时,先用 -m -json 区分 Path、Replace、Dir 和 GoMod,再检查 go.mod、go.work 及执行目录,按证据修正替换关系。324 收藏 -
go test 看到旧输出或失败用例像是没有重新执行时,先识别 cached 标记,再用 -count=1、go clean -testcache 和 GODEBUG 判断到底是测试结果缓存、构建缓存还是 vet 阻止了运行。403 收藏 -
Go encoding/csv 读取 CSV 时遇到字段数量变化,通常是 FieldsPerRecord 的契约与实际文件不一致。本文区分严格定宽、首行定宽和允许变长三种模式,并给出带行号定位的处理方式。473 收藏 -
Go 使用 RawStdEncoding 解码时出现填充错误,通常不是数据必须补等号,而是发送方和接收方采用了不同的 Base64 约定。本文用最小示例区分 StdEncoding 与 RawStdEncoding,并给出错误定位和测试边界。155 收藏 -
Go Reader 的字节分块不保证 UTF-8 字符边界。本文给出持续使用 bufio.Reader.ReadRune 的完整示例,区分半个编码、非法字节、合法 U+FFFD 与流末尾截断,并说明批量解码的状态约定。318 收藏 -
Go 的 AddDate 按 Location 的日历规则加一天,DST 切换日可能对应 23 小时或 25 小时;如果业务要固定时长,应使用 Add。本文梳理时区、缺失时间、重复时间和比较持久化边界。241 收藏 -
Go 的 os.ReadFile 遇到符号链接时默认读取链接目标内容;本文对比 ReadFile、Stat、Lstat 和 Readlink,说明如何区分目标文件、链接自身与链接保存的路径。483 收藏 -
Go HTTP/2 并发升高后请求固定批次排队,通常要先区分每连接流上限、客户端跨连接策略和后端处理变慢。本文说明如何读取证据,并用 net/http 的 HTTP2 配置修复对应边界。193 收藏 -
Go 时区缩写解析成功不代表偏移正确。本文解释 Parse 的本地时区依赖与未知缩写回退,给出显式地区解析旧输入、RFC3339 数字偏移交换新数据的写法及边界。275 收藏 -
从 Go HTTP/2 的连接错误和 HPACK 解码证据出发,区分非法索引、字符串编码、动态表更新与头部大小问题,并给出日志分类和修复边界。162 收藏 -
HTTP/2 的 GOAWAY 不是普通业务错误,它表示连接不再接受新流,并用 last-stream-id 划出可能已处理的范围。本文结合 Go net/http 的请求体重放条件,给出幂等请求、非幂等请求和监控证据的有限重试策略。410 收藏 -
Golang · Go问答 | 2星期前 | 日志 · 标准库 · go · 故障排查 · Go 结构化日志 ReplaceAttr log/slog WithGroup WithAttrs slog.Handler
Go log/slog 中字段消失,通常不是 Logger.With 没有传进去,而是 ReplaceAttr 返回了零值 Attr,或自定义 Handler 在 WithAttrs、WithGroup 中丢掉了状态。本文按调用链定位原因,并给出只过滤明确键名的修复写法。417 收藏 -
slog 的普通 error 属性默认不是错误链对象。本文给出 LogValuer 日志适配器,显式输出安全消息、错误码和操作名,并说明包装错误、字段类型迁移与 Handler 的边界。357 收藏 -
slog JSONHandler 输出字段顺序变化时,先区分 JSON 语义变化与文本排列变化。本文说明 With 属性、调用属性、分组和 ReplaceAttr 的影响,并给出结构化测试与固定字节协议的处理边界。300 收藏 -
Go 的 io.SectionReader 会把读取限制在指定区间内。本文说明越界短读的原因、Read 与 ReadAt 的偏移差异,以及如何用 ReadFull 和 n/err 处理固定长度与尾部数据。399 收藏