Go语言技术文章
-
Go 动态解析 JSON 时,默认数字会进入 float64。使用 Decoder.UseNumber() 保留 json.Number,再按 Int64、math/big 或字符串边界转换,避免大整数静默丢失精度。454 收藏 -
Go 的 StdEncoding 会保留 Base64 的 = 补位,RawStdEncoding 使用相同字母表但省略补位。本文用输入长度、编解码配对和 URL 字母表三个边界说明如何选择。228 收藏 -
Go json.RawMessage 通过标准库解码时会复制输入,但手动切片转换仍可能共享底层字节;本文说明如何在延迟解析、队列和并发边界前建立独立所有权。369 收藏 -
Go base64.NewEncoder 会缓存不足三个字节的尾部数据。本文按输入长度余数说明忘记 Close 时标准 Base64 会少掉多少字符,并给出显式 Close、错误检查和边界回归测试的修复方法。303 收藏 -
Go json.Decoder 默认忽略结构体未知字段,适合灰度客户端向前兼容;本文用示例说明类型错误、DisallowUnknownFields 严格入口和分阶段收紧清单。372 收藏 -
Go encoding/xml 中,嵌套类型的 XMLName 显式标签与外层字段标签不一致会触发名称冲突。本文用固定根节点和可复用子节点两个写法说明如何稳定解码,并梳理命名空间、大小写和 Marshal 的边界。490 收藏 -
Go 1.22 及以上版本可以在 http.ServeMux 模式中同时声明请求方法和路径,本文用用户资源路由说明 GET、HEAD、POST、DELETE、PathValue、405 和 Allow 的匹配边界。217 收藏 -
Go http.Client 默认最多连续跟随 10 次重定向。本文用 CheckRedirect 和 len(via) 设置业务上限,并比较返回错误与保留最后一次 3xx 响应两种处理方式。147 收藏 -
解释 Go encoding/xml 的 Token API 为什么会让保存的 xml.CharData 被后续内容覆盖,并给出 CharData.Copy、string 和 CopyToken 的正确选择。399 收藏 -
Go xml.Decoder 的 Strict=false 不是万能容错开关。本文用缺失结束标签、未知实体、孤立结束标签、命名空间和字符集几个输入,拆开说明哪些问题会被放宽,哪些仍必须修复或显式处理。128 收藏 -
解释 Go http.Request.Clone 为什么不能让多个请求重复读取同一份 Body,并给出受限缓存、独立 Reader 和 GetBody 重试方案。237 收藏 -
自定义错误实现 Error 并不等于 errors.Is 能按业务含义匹配。本文从默认相等规则出发,说明何时实现 Is、如何按稳定字段比较,以及 Is、Unwrap 和哨兵错误的职责区别。466 收藏 -
Go 的 url.Values.Encode 会按 key 排序并完成 URL 编码,但不会替你制定完整的签名协议。本文说明重复参数、特殊字符和签名字段如何纳入同一份规范化字符串。204 收藏 -
Go errors.As 的关键不是把错误再断言一次,而是按 error 实现方式声明目标变量。本文区分值错误和指针错误,说明包装后为何要传入 *T 或 **T,并给出排查清单。391 收藏 -
解释 Go url.ParseQuery 遇到未编码分号时返回错误的原因,区分分隔符与参数值,给出正确编码、旧协议兼容和回归检查方法。115 收藏