Golang比较数字

Qia*_*hen 1 types go assertion

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

var a interface{} = ...
var b interface{} = ...
Run Code Online (Sandbox Code Playgroud)

我知道他们是数字.它们可以是以下任何类型:

unit
unit8
uint16
uint32
uint64
int
int8
int16
int32
int64
float
float32
float64
Run Code Online (Sandbox Code Playgroud)

我写了一些测试代码如下.事实证明,当一个变量是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
Run Code Online (Sandbox Code Playgroud)

所以现在我的问题如下:为了比较这两个数字,为​​了获得这两个interface{}变量的类型,我是否必须测试这些超过10种类型的所有排列?理想情况下,我只想将它们投射到int64float64,但如果它们是int或者float,我将无法找到它们,直到用尽所有可能的类型.

Elw*_*nar 6

如果您的输入来自JSON输入,那么它是一个float64,根据文档:

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

  • bool,用于JSON布尔
  • float64,用于JSON数字
  • 字符串,用于JSON字符串
  • [] interface {},用于JSON数组
  • map [string] interface {},用于JSON对象
  • n为JSON null

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