Go语言技术文章
-
用 Go 的 encoding/xml 流式读取 XML 时,EndElement 不是靠字符串猜测匹配。本文用 xml.Name 栈解释嵌套结束标签、自闭合标签、命名空间和 io.EOF 的判断方式。312 收藏 -
Go regexp.FindAllStringSubmatchIndex 返回的是按捕获组编号排列的字节下标对。本文用一个键值文本解析场景说明如何映射整体匹配、命名捕获组、未匹配分支和 UTF-8 边界。134 收藏 -
Go JSON 指针字段设为 nil 后仍输出,通常是因为标签没有 omitempty,nil 会被编码为 null。本文从最小结构体、标签检查、接口契约和自定义 MarshalJSON 四个方向定位原因。334 收藏 -
讲清 Go json.Decoder.Token 如何用嵌套深度定位连续 JSON 流中的对象边界,并说明什么时候应改用 Decode 保留完整字段内容。240 收藏 -
Go 的 math/big.Float 使用二进制尾数精度,不是十进制小数位。本文用原创示例解释 SetPrec、舍入模式、运算接收者和 Text 输出之间的区别。470 收藏 -
Go 的 math/big.Int.SetString 通过第二个参数 base 指定进制:固定格式传明确进制,带 0b、0o、0x 前缀的输入可传 0 自动识别。本文说明返回值、下划线和不可信输入的处理边界。240 收藏 -
讲清 Go json.Decoder 开启 DisallowUnknownFields 后的未知字段错误,给出按 API 版本分流严格与兼容解码、检查尾部数据、记录迁移和逐步收紧的实用方案。228 收藏 -
Go 的 math/big.Rat 用任意精度分子和分母保存有理数,适合金额比例、配额和分数计算。本文说明如何创建、解析、运算和格式化 Rat,并划清与 float64 及浮点输出的边界。312 收藏 -
Go 程序明明访问 HTTPS,结果却一直使用 HTTP/1.1,排查时不要只盯着 ForceAttemptHTTP2。本文按客户端声明、TLS 握手选择和 HTTP 实际协议三个层次,说明应记录的字段、常见冲突以及最小复现代码。283 收藏 -
Go strconv 转换失败后,用 errors.As 获取 *strconv.NumError,读取 Func、Num、Err 字段,并用 errors.Is 区分语法错误与范围错误。301 收藏 -
Go x509.SystemCertPool 在 Linux、Windows 和 macOS 上结果不同,原因在于根证书来源和验证路径不同。本文对比 Unix PEM 文件、Windows CryptoAPI、macOS Security.framework 的边界,并给出追加企业 CA、排查容器信任和选择 fallback roots 的稳定写法。236 收藏 -
Go strconv.ParseFloat 可以解析 NaN、Inf 和 Infinity,但 NaN、正负无穷与普通数字溢出并不是一回事。本文用 math.IsNaN、math.IsInf 和 ErrRange 给出清晰的分类方式。501 收藏 -
解释 Go 高频循环中反复调用 time.After 的分配与回收边界,区分 Go 1.23 前后的定时器语义,并给出可复用 Timer 的 Stop、排空和 Reset 写法。313 收藏 -
用可复用的 []byte 缓冲调用 strconv.AppendQuote,连续构造带引号字符串,减少中间字符串和无效扩容,并厘清 Go 字符串字面量与 JSON、URL 编码的边界。184 收藏 -
Go 的 time.Timer.C 没有读到事件,不等于定时器已经停止。本文用 Stop、Reset 的返回值和业务侧状态记录,拆开未触发、已停止、已到期与已消费几种情况。173 收藏