在Golang中将Json.Number转换为int/int64/float64

9
我有一个变量名为data,它是一个接口类型。当我打印它的类型时,显示为json.Number。如何将其转换为int/int64/float64类型?如果我尝试使用data.(float64)进行类型转换,会出现panic错误。
panic: interface conversion: interface {} is json.Number, not float64

5
data.(json.Number).Int64() 这里需要对实际底层类型进行类型断言,而不是任意的类型。这意味着如果一个接口的底层类型是 json.Number,那么你需要将其类型断言为 json.Number。此外,在 Go 中,v.(T) 不是转换,而是类型断言。 - mkopriva
1
Go语言根本不支持类型转换。只能进行类型转换。 - Jonathan Hall
2
@horsehair 因为Go在编译时不知道底层类型,类型断言是一种测试,可以帮助您在运行时确定接口值的底层类型。如果您需要使用底层类型的“特性”而不是接口类型的“特性”,则这非常有用。 - mkopriva
2
@horsehair的panic是运行时错误,而不是编译时错误。 - mkopriva
2
@horsehair类型的信息存储在Go的运行时系统中。虽然json.Number的底层类型可能是string,但这两种类型并不相同,因此将一个类型断言为另一个类型注定会失败,但是将一个类型转换为另一个类型是可以的。 - mkopriva
显示剩余4条评论
1个回答

20
请查看类型Number的文档,了解json.Number上可用的方法。
f, err := data.(json.Number).Float64()

8
作为刚接触围棋的新手,这个例子正是我需要的。虽然所提供的文档准确无误,但缺乏对如何使用功能进行直接演示。谢谢! - 0x574F4F54

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接