我有两个interface{}
s a
,b
来自JSON解码和用户输入,让我们说:
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
所以现在我的问题如下:为了比较这两个数字,为了获得这两个interface{}
变量的类型,我是否必须测试这些超过10种类型的所有排列?理想情况下,我只想将它们投射到int64
或float64
,但如果它们是int
或者float
,我将无法找到它们,直到用尽所有可能的类型.
如果您的输入来自JSON输入,那么它是一个float64
,根据文档:
要将JSON解组为接口值,Unmarshal会将其中一个存储在接口值中:
bool,用于JSON布尔
float64,用于JSON数字
字符串,用于JSON字符串
[] interface {},用于JSON数组
map [string] interface {},用于JSON对象
n为JSON null
如果它来自用户输入,那么当你阅读它时,它就是你决定的,所以你不应该有任何问题来获得正确的类型.