回答

收藏

将 interface{} 转换为 int

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

我试图从 JSON获得一个值并将其转换为 int 但它不起作用,我不知道如何正确执行。
: V, X3 v1 z4 ^  w" a. Q这是错消息:
) g+ Q/ k. k" @0 I1 c
    ...cannot convert val (type interface {}) to type int: need type assertion. S& u, e( S7 b
和代码:: W1 E2 ~- A; u" D( Z5 J0 r  F" S
      r) [9 I, x. w: i6 p
  •     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)( f3 l. ]( V8 f2 Q% w
你想要一个类型的断言:9 _6 ]  z& Q" B" q! h
    iAreaId := val.(int)iAreaId,ok := val.(int) // Alt. non panicking version , ~: Z" c! n; W3 V8 L4 l  j' A4 E6 L
接口类型值不能转换的原因是参考规范中的这些规则:8 K! T, L4 h& z6 A' ~
转换是一种形式T(x)where Tis a type and xis a expression that can convert to type T./ H( e$ w* K# [( Q/ ]

' W) F9 f! ]) S' `在以下任何情况下,非常值 x 可转换为类型  T:" z" ~2 A$ [  C% [2 D( ?7 a
[ol]x 可分配给 T。3 n+ p7 ~* \1 F3 m" @
x 的类型和 T 基础类型相同。3 ]% U3 @8 t) H5 ^
x 的类型和 T 是未命名的指针类型,其指针基类型具有相同的底层类型。* }# t1 _1 z0 B) P: k, e
x 的类型和 T 是整数或浮点类型。2 p5 a1 q" d  v( ^; j) @: z
x 的类型和 T 都是复数类型。' u2 R. }5 h4 ~! r/ i+ a
x 是整数或字节片或符文,T 是字符串类型。
. V9 ], u$ L/ o' Tx 是字符串,T 是字节或符文切片。[/ol]但
$ B: O+ |* l0 ^0 M( Y9 K2 i8 [
    iAreaId := int(val)4 x1 O5 Z2 U, M& R( j% M
是不任何情况下1.-7。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则