Go语言技术文章
-
用 Go hash/fnv 把稳定字符串映射为分片编号,讲清 FNV-1a、UTF-8 字节、32/64 位选择、取模边界与扩容迁移风险。209 收藏 -
Go json.Decoder 没有单次读取字节数设置。通过 LimitReader 的加一字节预算区分超限,检查尾随内容,并结合 MaxBytesReader 返回明确的HTTP错误。406 收藏 -
用 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 收藏 -
Linux 文件变更审计应先限定对象、动作和检索 key,再用 path 或 dir 规则记录写入与属性变化。本文说明 auditctl 的最小规则、持久化方式、状态检查与不命中排查。423 收藏 -
PHP 8.3 的 #[Override] 能把方法重写意图交给编译期检查:父类或接口没有同名目标时尽早报错。本文区分重写目标不存在与方法签名不兼容两类问题,并给出旧项目迁移清单。451 收藏 -
Redis GETEX 可以在返回字符串值的同时设置或移除过期时间。本文用 EX、PX、EXAT、PXAT 和 PERSIST 区分相对与绝对过期,并说明空 key、错误类型和写权限边界。234 收藏 -
用 MySQL JSON_PRETTY 把对象、数组和标量整理成可读 JSON,说明缩进、NULL、非法 JSON、特殊字符和 JSON 列查询中的边界,避免把格式化文本误当成存储空间。395 收藏 -
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问答 | 3星期前 | TLS · 连接池 · 故障排查 · Go问答 · 证书轮换 DidResume session ticket ClientSessionCache Go TLS SetSessionTicketKeys
Go TLS 证书轮换后仍看到旧会话,通常不是证书文件没替换,而是旧连接、HTTP Transport 连接池或 session ticket 在复用。本文用 DidResume 区分恢复握手,给出服务端证书指针切换、票据密钥轮换、客户端 Transport 重建和长连接排空的迁移顺序。354 收藏