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

在golang中将Json.Number转换为int/int64/float64,go,go-interface,Go,Go Interface,我有一个变量数据,它是一个接口。当我打印它的类型时,我得到的是json.Number。如何将cast键入int/int64/float64 如果我尝试数据(float64),它最终会出现恐慌错误 panic: interface conversion: interface {} is json.Number, not float64 查看此文档以了解有关json.Number的可用方法: data.(json.Number).Int64()您可以将assert键入实际的底层类型,而不是您希望

我有一个变量数据,它是一个接口。当我打印它的类型时,我得到的是json.Number。如何将cast键入int/int64/float64

如果我尝试数据(float64),它最终会出现恐慌错误

panic: interface conversion: interface {} is json.Number, not float64

查看此文档以了解有关
json.Number
的可用方法:


data.(json.Number).Int64()
您可以将assert键入实际的底层类型,而不是您希望的任意类型。这意味着,如果接口的底层类型是
json.Number
,则键入并将其断言为
json.Number
。Go中的
v.(T)
不是转换,而是类型断言。Go根本不支持类型转换。只有类型转换。@Horsehear,因为Go在编译时不知道底层类型,而类型断言是一个测试,可以帮助您在运行时确定接口值的底层类型。如果需要使用基础类型的“功能”而不是接口类型的“功能”,则此选项非常有用。@Horsehear panic是运行时错误,而不是编译时错误。@Horsehear类型信息存储在Go的运行时系统中。另外,虽然
json.Number
的底层类型可能是
string
,但这两种类型并不相同,因此将一种类型声明为另一种类型肯定会失败,但是将一种类型转换为另一种类型是可以的。作为一个新手,我需要这样一个示例。虽然参考的文档是准确的,但它缺乏如何使用该功能的直接演示。谢谢
f, err := data.(json.Number).Float64()