我有两个来自JSON解码和用户输入的interface{}
s a
和b
,让我们说:
var a interface{} = ...
var b interface{} = ...
我知道他们是数字。它们可以是以下任何类型:
unit
unit8
uint16
uint32
uint64
int
int8
int16
int32
int64
float
float32
float64
我写了一些测试代码如下。事实证明,当变量为int
时,它将以int64
断言失败。
var a interface{} = 1
v, f := a.(int64)
fmt.Println(v, f) //0 false
v1, f1 := a.(int)
fmt.Println(v1, f1) //1 true
所以现在我的问题如下:为了比较这两个数字,我是否必须测试这些超过10种类型的所有排列,以便获得这两个interface{}
变量的类型?理想情况下,我只想将它们转换为int64
或float64
,但如果它们是int
或float
,我将无法找到它们,直到用尽所有可能的类型。
答案 0 :(得分:6)
如果您的输入来自JSON输入,那么它是float64
,根据doc:
要将JSON解组为接口值,Unmarshal会将其中一个存储在接口值中:
- bool,适用于JSON布尔人
- float64,用于JSON编号
- 字符串,用于JSON字符串
- [] interface {},用于JSON数组
- map [string] interface {},用于JSON对象
- nil for JSON null
如果它来自用户输入,那么当你阅读它时,它就是你所决定的,所以你应该没有任何问题来获得正确的类型。