Go问答技术文章
-
Go channel 关闭并耗尽后,单值接收仍会返回元素类型的零值。本文用 int channel 说明合法零值与关闭状态的区别,并给出 value、ok 双值接收、range 和缓冲 channel 的边界处理方式。378 收藏 -
Go url.Parse 会把路径保存为解码后的 Path,原始的 %2F 等编码可能只保留在 RawPath 提示中。本文用 EscapedPath 说明如何稳定输出有效的原始路径编码,并处理提示失效的边界。465 收藏 -
Go json.Decoder 字段为空时,先看错误,再检查导出字段、JSON标签、大小写、嵌套层级、目标指针和输入流。区分缺失、null与空字符串,并说明严格模式的兼容取舍。166 收藏 -
Go json.Unmarshal 解码时间字段时报错,先区分时间格式不符合 RFC3339 还是 JSON 类型与结构体字段不匹配,再决定保留 time.Time、增加自定义 UnmarshalJSON,或使用中间结构完成外部格式适配。214 收藏 -
Go 中公开的 API 是 runtime/debug.SetMemoryLimit,它提供的是软内存限制,并不会把容器 RSS 变成硬上限。本文区分 Go 运行时统计、cgroup 硬限制和外部内存,说明进程仍超限时该如何排查与调整。105 收藏 -
Go 的 sync.RWMutex 不支持把 RLock 直接升级为 Lock。读锁持有者在写者等待时继续申请写锁,会形成自己等待自己释放读锁的阻塞环。本文解释规则、定位证据和安全改写方式。453 收藏 -
Go 中 WithDeadline 和 WithTimeout 得到的截止时间不一致,通常来自调用时刻不同或父 Context 更早过期。本文按故障现场、父子截止约束和剩余预算说明排查与修复边界。266 收藏 -
Go Rows.Next 返回 false 而 Err 为 nil,可能是正常结束或空结果。本文区分游标消费、提前关闭、扫描与遍历错误,提供单结果集读取函数,并解释 ErrNoRows 与多结果集边界。120 收藏 -
Golang · Go问答 | 4星期前 | TLS · 连接池 · 故障排查 · Go问答 · 证书轮换 DidResume session ticket ClientSessionCache Go TLS SetSessionTicketKeys
Go TLS 证书轮换后仍看到旧会话,通常不是证书文件没替换,而是旧连接、HTTP Transport 连接池或 session ticket 在复用。本文用 DidResume 区分恢复握手,给出服务端证书指针切换、票据密钥轮换、客户端 Transport 重建和长连接排空的迁移顺序。354 收藏 -
Go build 与 go vet 结果不同不一定是工具链异常。本文通过一个格式参数错误的小模块,区分编译、vet 和测试职责,给出修复代码及本地与 CI 的环境对齐方法。444 收藏 -
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 收藏