Go语言技术文章
-
Go 的 xmlattr 本质上是 encoding/xml 结构体标签里的 attr 选项。属性读不到或输出名称不对时,应依次核对属性名、字段可导出性、XMLName 和命名空间,再用 Marshal/Unmarshal 双向验证。360 收藏 -
Go math/bits.Mul 返回 hi 和 lo 后,如何判断乘积是否超出低半部,以及怎样用 Mul64、math/big 重建并核对完整结果。479 收藏 -
Go 的 encoding/xml 没有 xmlattr 关键字,XML 属性应使用 xml:"name,attr" 映射到导出字段。本文说明属性读取、嵌套元素、写回 XML、未知属性接收和常见空值排查方法。361 收藏 -
Go 中读取 uint64 乘法高位应使用 math/bits.Mul64,它返回完整乘积的 hi 高 64 位和 lo 低 64 位。本文说明最小写法、溢出判断、类型边界和测试对照,避免先相乘再移位导致高位丢失。163 收藏 -
Go 的 UnmarshalJSON 适合处理 JSON 表示与 Go 类型之间的边界,不应承载数据库、权限或完整业务校验。本文用别名类型、临时结构和错误分层说明如何限定自定义解码责任。433 收藏 -
Go math/big 的精度控制关键在于 big.Float 的尾数位数、舍入模式和 Accuracy 状态。本文说明如何用 SetPrec、SetMode 和 Acc 设定并检查精度,并比较 big.Int、big.Rat 与 big.Float 的适用边界。363 收藏 -
Go 自定义 UnmarshalJSON 时把原类型再次交给 json.Unmarshal,会触发方法递归。本文用别名类型切断回调,并给出栈帧、字段错误和半成品对象的排查清单。118 收藏 -
math/big 的 Int 运算通常不会像机器整数一样溢出,异常多出现在 Int64/Uint64 转换、big.Float 精度舍入或接收者复用。本文给出一套可检查的定位方法。477 收藏 -
围绕 Go encoding/json.Unmarshal 讲清目标类型、UnmarshalJSON、自定义字段转换、别名类型防递归,以及 SyntaxError 和 UnmarshalTypeError 的排查方法。242 收藏 -
Go 读取超过内置范围的大整数时,应按输入形态选择 math/big 的 SetString、fmt.Sscan、JSON 解码或 SetBytes,并在 String、Text、Bytes 和 int64 转换之间处理进制、符号与范围边界。474 收藏 -
在 Go 的 PATCH 请求中,用 jsonnull 只包装需要区分缺失、JSON null 和空数组的字段,避免三态语义扩散到响应模型和数据库模型。204 收藏 -
Go 的 string 按字节保存,按字节截断中文或表情可能切入 UTF-8 编码中间。本文用 unicode/utf8 设计安全的字节上限切分函数,并说明非法输入、rune 计数和性能边界。200 收藏 -
Go 处理 jsonnull 时,字段缺失、JSON null、空数组和有值数组不能只用 len 判断。本文用最小复现、Nullable 状态和 PATCH 分支说明如何定位空值错误。287 收藏 -
Go 中排查 unicode/utf8 非法序列时,先用 Valid 判断整体字节,再用 RuneError 与 size=1 定位具体偏移,并区分截断、错误编码和真实替换字符。243 收藏 -
Go 的 encoding/json 会把 JSON null 解成 nil 切片,把空数组解成非 nil 的零长度切片。本文用可复制示例说明字段缺失、null、[] 的区别,以及如何在接口输出时稳定选择 null、[] 或省略字段。266 收藏