将interface {}转换为int

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

这是错误消息:

...cannot convert val (interface" title="type interface">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。

以上是 将interface {}转换为int 的全部内容, 来源链接: utcz.com/qa/433835.html

回到顶部