# interface{} nil 判断
interface{} 类型的变量 包含了2个指针, 一个指针指向值类型, 一个指向实际的值 对于 interface{} 类型的 nil 变量来说, 他的两个指针都是 0, 当我们将一个具体类型的值赋值给一个 interface{} 类型的变量的时候, 就同时把类型和值都赋值给了 interface{} 里的两个指针. 如果类型的值是 nil 的话, interface{} 变量依然会存储对应的类型指针和值指针. 此时值指针指向 nil 变量, 类型指针指向的是非 nil 变量, 此时 a == nil 返回 false.
解决: 避免将一个有可能 nil 的变量赋值给 interface{} 变量.
# json 解析
json unmarshal 解析数字默认使用 float64 类型, 然后float64数值在marshal时, 有一定概率(如果个位为0)会变为科学计数法形式….. 解决方案是使用 Decoder.UseNumber()
|
|