Golang比较数字

时间:2015-12-31 10:32:23

标签: go types assertion

我有两个来自JSON解码和用户输入的interface{} s ab,让我们说:

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{}变量的类型?理想情况下,我只想将它们转换为int64float64,但如果它们是intfloat,我将无法找到它们,直到用尽所有可能的类型。

1 个答案:

答案 0 :(得分:6)

如果您的输入来自JSON输入,那么它是float64,根据doc

  

要将JSON解组为接口值,Unmarshal会将其中一个存储在接口值中:

     
      
  • bool,适用于JSON布尔人
  •   
  • float64,用于JSON编号
  •   
  • 字符串,用于JSON字符串
  •   
  • [] interface {},用于JSON数组
  •   
  • map [string] interface {},用于JSON对象
  •   
  • nil for JSON null
  •   

如果它来自用户输入,那么当你阅读它时,它就是你所决定的,所以你应该没有任何问题来获得正确的类型。