Go语言技术文章
-
用 Go 的 json.Decoder 连续读取多个 JSON 对象,区分 io.EOF 正常结束与格式、类型错误,并给出文件和 HTTP Reader 的接入写法。164 收藏 -
Go 解析 CSV 时,record 下标只能说明字段在当前切片中的位置,不能直接定位原始文件。本文演示如何在 Read 成功后使用 encoding/csv.Reader.FieldPos 获得字段起始行号和字节列号,并结合 ParseError、InputOffset 和下标边界生成可排查的错误信息。171 收藏 -
Go 的 filepath.ToSlash 只负责把当前系统路径分隔符转换成斜杠,适合生成跨平台资源键、归档条目和 URL 风格路径。本文用一个资源清单场景拆开 ToSlash、Clean、path 与 PathEscape 的边界。295 收藏 -
Go 使用 encoding/csv 读取 CSV 时,不要把业务字段写死在 record[0]、record[1] 上。本文从列顺序变化的现象出发,演示如何读取表头、建立列名映射、按列名安全取值,并处理缺失表头、重复表头和记录列数不足等边界。423 收藏 -
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问答 | 2天前 | TLS · 连接池 · 故障排查 · Go问答 · 证书轮换 DidResume session ticket ClientSessionCache Go TLS SetSessionTicketKeys
Go TLS 证书轮换后仍看到旧会话,通常不是证书文件没替换,而是旧连接、HTTP Transport 连接池或 session ticket 在复用。本文用 DidResume 区分恢复握手,给出服务端证书指针切换、票据密钥轮换、客户端 Transport 重建和长连接排空的迁移顺序。354 收藏 -
使用 Go net/url 修改查询参数时,直接操作 URL.Query 和 RawQuery,避免重建路径导致 %2F 等编码边界发生变化。本文从最小写法、字段分工、重复参数和完整示例说明可靠做法。464 收藏 -
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 收藏