猿问

Golang 比较数字

我有两个interface{}sa和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

所以现在我的问题是:为了比较这两个数字,我是否必须测试这10多个类型的所有排列才能获得这两个interface{}变量的类型?理想情况下,我只想将它们转换为int64or float64,但如果它们是int或float,则在用尽所有可能的类型之前我无法找到它们。


眼眸繁星
浏览 266回答 1
1回答

森栏

如果您的输入来自 JSON 输入,那么它是 a float64,根据文档:要将 JSON 解组为接口值,Unmarshal 将其中之一存储在接口值中:bool,用于 JSON 布尔值float64,用于 JSON 数字字符串,用于 JSON 字符串[]接口{},用于 JSON 数组map[string]interface{},用于 JSON 对象nil 表示 JSON null如果它来自用户输入,那么它就是你在阅读它时决定的任何东西,所以你应该没有任何问题来获得正确的类型。
随时随地看视频慕课网APP

相关分类

Go
我要回答