当前位置: 首页 > 面试题库 >

将interface {}转换为int

萧晓博
2023-03-14
问题内容

我正在尝试从JSON获取值并将其强制转换为int,但它不起作用,而且我不知道如何正确执行。

这是错误消息:

...cannot convert val (type interface {}) to type int: need type assertion

代码

    var f interface{}
    err = json.Unmarshal([]byte(jsonStr), &f)
    if err != nil {
        utility.CreateErrorResponse(w, "Error: failed to parse JSON data.")
        return
    }

    m := f.(map[string]interface{})

    val, ok := m["area_id"]
    if !ok {
        utility.CreateErrorResponse(w, "Error: Area ID is missing from submitted data.")
        return
    }

    fmt.Fprintf(w, "Type = %v", val)   // <--- Type = float64
    iAreaId := int(val)                // <--- Error on this line.
    testName := "Area_" + iAreaId      // not reaching here

问题答案:

代替

iAreaId := int(val)

你想要一个类型断言:

iAreaId := val.(int)
iAreaId, ok := val.(int) // Alt. non panicking version

您不能转换接口类型值的原因是参考的规范部分中的以下规则:

转换是形式的表达式,T(x)其中T是类型,并且x是可以转换为类型T的表达式。

在以下任何一种情况下,可以将非恒定值x转换为类型T:

  1. x可分配给T。
  2. x的类型和T具有相同的基础类型。
  3. x的类型和T是未命名的指针类型,并且它们的指针基类型具有相同的基础类型。
  4. x的类型和T都是整数或浮点类型。
  5. x的类型和T都是复数类型。
  6. x是整数或字节或符文的片段,T是字符串类型。
  7. x是字符串,T是字节或符文的切片。

iAreaId := int(val)

任何情况下1.-7。



 类似资料:
  • 问题内容: 我只想编写这样的代码: 我以为可以代表任何类型,所以也可以代表任何类型,现在我知道我错了,是一个整体类型,不能视为。 因此,有人可以帮助我如何使此代码正常工作,或其他解决方案吗? PS :我知道或可以相互转换,但是实际上这并不是我的意图,可能还有另一种类型,而不是and 。 问题答案: 现在我知道我错了,是一个整体类型,不能视为。 是的,那是因为它是它自己的类型(而不是其他任何类型的“

  • 问题内容: 从来源来看,我无法影响我在地图中获得的数据,该地图以表示。 我需要处理所包含的数据,最好是(其中的数据非常适合该处理)。 我还需要从数据中生成键列表,因为这些键是事先未知的。 我可以在网上找到的大多数类似问题或多或少都说这是不可能的,但是如果我的地图是,则表明数据在那里,可读性为。 我该怎么办fmt.Println可以做什么? 问题答案: 处理未知接口的一种安全方法,只需使用fmt.S

  • 问题内容: 我正在使用docopt来解析命令行参数。此方法有效,并生成地图,例如 现在,我想将and和值连接到一个字符串,两个值之间用冒号表示。基本上,诸如: 不幸的是,这不起作用,因为我收到了错误消息: 无效的操作:arguments [“”] +“:”(类型不匹配的接口{}和字符串) 因此,显然我需要将从映射中获得的值(就是,所以可以是任何东西)转换为字符串。现在我的问题是,我该怎么做? 问题

  • 问题内容: 目前,我目前正在处理一些代码,其中涉及类型为var的 它具有价值,我可以像这样轻松访问: 很好,但是我希望能够使用该 函数,由于它需要type 而不是type ,因此通常会出错。 可以使用该功能的最合适的解决方案是什么,我想也许是某种转换方法? 问题答案: 您需要构造一个新的type数组才能使用: 请参阅相关的Golang常见问题解答条目:我可以将[] T转换为[]接口{}吗?

  • 问题内容: 我需要一种将结构/接口动态转换回其原始对象的方法。我可以在其中添加方法/函数。基本上我需要这样的东西: 在最后一次转换时,除了该结构内部的内容外,我对原始结构一无所知,所以我不能只是这样: 问题答案: 否:如本主题所述 Go既不是协变也不是协变。类型 相等 或不 相等 。 您必须将结构拆开并处理碎片,或者使用反射。 类型断言只是“ 断言 ”,而不是任何类型的“强制”。 另请参阅此线程,

  • 问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转