【问题标题】:Convert Json.Number into int/int64/float64 in golang在golang中将Json.Number转换为int/int64/float64
【发布时间】:2018-07-04 17:43:52
【问题描述】:

我有一个可变数据,它是一个接口。当我打印它的类型时,我得到它作为 json.Number。如何将类型转换为 int/int64/float64

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

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

【问题讨论】:

  • data.(json.Number).Int64() 您将 assert 输入到实际的底层类型,而不是您希望的任意类型。这意味着如果一个接口的底层类型是json.Number,那么您将其断言为json.Number。而且 Go 中的 v.(T) 不是转换,而是类型断言。
  • Go 根本不支持类型转换。仅类型转换。
  • @horsehair 因为 Go 在编译类型时不知道底层类型,而类型断言是一种测试,可帮助您在运行时确定接口值的底层类型。如果您需要使用底层类型的“特性”而不是接口类型的“特性”,这将非常有用。
  • @horsehair 恐慌是运行时错误,而不是编译时错误。
  • @horsehair 类型信息存储在 Go 的运行时系统中。此外,虽然json.Number 的基础类型可能是string,但两种类型并不相同,因此 type-asserting 一个到另一个肯定会失败,但是 converting 一个对另一个是可以的。

标签: go go-interface


【解决方案1】:

查看此文档以了解json.Number 上的可用方法: https://golang.org/pkg/encoding/json/#Number

f, err := data.(json.Number).Float64()

【讨论】:

  • 作为一个新手,这样的例子正是我所需要的。虽然引用的文档是准确的,但它缺乏如何使用该功能的直接演示。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2011-05-02
相关资源
最近更新 更多