Go语言技术文章
-
Go 的 sync.RWMutex 在等待写者时会暂时挡住后续 RLock。本文从锁等待、临界区长度、递归读锁和快照设计入手,给出读请求堆积的排查与处理方案。383 收藏 -
Go Mutex TryLock 返回 false 只表示当前没有拿到锁,不应继续读取受保护状态。本文比较阻塞等待、旧快照、快速拒绝和异步转交四种路径,并给出可直接改造的不可变快照示例。431 收藏 -
Go context.Value 取值失败,应区分 key 未命中与值类型断言失败,再比较 key 的动态类型和动态值。本文用原创示例解释定义类型、别名与跨包约定,并提供私有 key 的类型化访问封装。368 收藏 -
Go 上下文取消后下游请求仍不退出,通常不是 cancel 失效,而是取消信号没有传到具体 API,或底层阻塞点本身不支持取消。本文按 HTTP、数据库和自定义调用链给出排查与修复方法。313 收藏 -
Go encoding/csv 遇到列数不一致时,关键是先理解 FieldsPerRecord 的默认约束,再用 ErrFieldCount 与 ParseError 区分字段数问题和 CSV 语法问题。本文给出固定列、变长记录和兼容脏数据三种处理方式。499 收藏 -
Go 精简容器中 time.LoadLocation 失败,通常是镜像缺少 IANA 时区数据库。本文按查找顺序说明安装 tzdata 与导入 time/tzdata 两种修复方案,并给出容器上线复查清单。401 收藏 -
Go 的 time.Parse 不使用 YYYY-MM-DD 这类占位符,而是用固定参考时间描述布局。本文从解析失败的现场出发,拆解 2006、01、02、15、04、05、MST 和 -07:00 的含义,并说明无时区输入时 Parse 与 ParseInLocation 的区别。487 收藏 -
Go 正则遇到非法 UTF-8 字节时不会自动报错,而是按 utf8.RuneError 解释输入。本文从匹配现象、编码策略和字节索引三个边界说明如何定位问题,并给出严格拒绝与规范化的 Go 写法。199 收藏 -
Go POSIX 与默认正则既有语法范围差异,也有最左最先与最左最长的选择差异。本文通过原创对照示例说明 Compile、CompilePOSIX、Longest 的取舍,并提醒捕获分组和并发配置边界。491 收藏 -
Go 的 math/big.Rat.SetString 支持十进制小数、指数和分数格式。本文排查逗号、单位、空白和返回值误用等失败原因,并说明 RatString 与 FloatString 的区别。349 收藏 -
math/big.Int.SetString 返回的是大整数指针和成功布尔值,不会单独返回 error。本文围绕进制参数、前缀、失败返回值和边界封装,说明为什么解析失败时会得到 nil,以及怎样安全处理。153 收藏 -
Go HKDF 派生长度不足应先区分 Reader 与标准库定长接口,再检查字节单位及累计输出上限。本文给出定长读取和错误处理示例,解释输入参数、重复创建 Reader 与迁移时的结果分配差异。257 收藏 -
Go RSA-PSS 签名成功但验签失败时,优先对齐 digest、Hash 和 SaltLength。本文用 SHA-256 与等 Hash 盐长说明 SignPSS、VerifyPSS 的参数责任,并比较固定盐长与自动盐长在跨实现协议中的取舍。416 收藏 -
Go Ed25519 验签失败时,优先核对原始消息、公钥和签名字节是否一致,再检查 Base64、十六进制解码与长度边界。368 收藏 -
Go 自定义证书链验证失败时,先把 Roots、Intermediates 和 KeyUsages 分开检查:根证书决定信任锚,中间证书负责补链,KeyUsages 决定用途约束。339 收藏