回答

收藏

将 interface{} 转换为 int

技术问答 技术问答 319 人阅读 | 0 人回复 | 2023-09-12

我试图从 JSON获得一个值并将其转换为 int 但它不起作用,我不知道如何正确执行。
$ s) m7 p: _" ]2 h/ A4 D; o这是错消息:
' X5 {% u9 ^) O% f
    ...cannot convert val (type interface {}) to type int: need type assertion
    9 J- ?! b  K5 t( ~* C* p
和代码:. e. `. s0 z3 a6 L* D8 A' ?) z, I0 n
    ' ]1 F2 _1 G: P8 A4 e( H" X
  •     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)   // 代替[code]iAreaId := int(val). m& C0 R& R  H3 ]3 V% ]
你想要一个类型的断言:
( G& N% C; y5 @
    iAreaId := val.(int)iAreaId,ok := val.(int) // Alt. non panicking version
    # w, G5 _* n  W$ c' ]- h8 G
接口类型值不能转换的原因是参考规范中的这些规则:
$ ~7 c9 c1 I$ ?: b$ E7 I6 [转换是一种形式T(x)where Tis a type and xis a expression that can convert to type T.: [  f# f0 J0 N' H% G8 t" N9 b

0 @9 b; u* A* i9 k. c在以下任何情况下,非常值 x 可转换为类型  T:
2 F2 m4 d5 p+ Y6 w4 g) Z. ^* u[ol]x 可分配给 T。: ~; p' [8 ?8 B2 c, @
x 的类型和 T 基础类型相同。" r# Q8 e* S' S2 b
x 的类型和 T 是未命名的指针类型,其指针基类型具有相同的底层类型。6 ^6 h. [- e' m- [0 h+ W
x 的类型和 T 是整数或浮点类型。* V# j0 w1 y5 M, ]3 \* Z
x 的类型和 T 都是复数类型。
# e/ S& ^4 K  d3 y) mx 是整数或字节片或符文,T 是字符串类型。
9 \: d; ^$ P/ M* Fx 是字符串,T 是字节或符文切片。[/ol]但9 E" z! r  A% Z/ m: g" _' O' j
    iAreaId := int(val)
    ; b/ P, y% s' A7 Z
是不任何情况下1.-7。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则