回答

收藏

将 interface{} 转换为 int

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

我试图从 JSON获得一个值并将其转换为 int 但它不起作用,我不知道如何正确执行。
) b( J& c! d5 j! w0 [这是错消息:- P/ a, @4 d* Y: \, w
    ...cannot convert val (type interface {}) to type int: need type assertion
    ; `3 T7 O+ x% x" u+ s& W6 D
和代码:/ b/ M8 e, W; k# U1 T( f$ q
    : {% U$ e3 b" E* K1 J: [( i  w
  •     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)
    $ ]4 |5 O( K& M  Z7 w, a
你想要一个类型的断言:# v: `* E5 A; u3 h5 v( p
    iAreaId := val.(int)iAreaId,ok := val.(int) // Alt. non panicking version
    2 ?  C* S, r% z2 ?) @7 ]
接口类型值不能转换的原因是参考规范中的这些规则:4 S: G' V1 R4 z+ U2 ~% b1 W
转换是一种形式T(x)where Tis a type and xis a expression that can convert to type T.
) c- z9 }* D# N; Y- P
( ?" ], l5 J) K- b  p. }( u  J( o6 I7 k在以下任何情况下,非常值 x 可转换为类型  T:
  f2 M& ]+ Q5 ]1 j[ol]x 可分配给 T。9 E  M2 C  F7 r" z
x 的类型和 T 基础类型相同。: q# ^6 C* W5 i$ d& V
x 的类型和 T 是未命名的指针类型,其指针基类型具有相同的底层类型。
/ S  e4 H, b$ Zx 的类型和 T 是整数或浮点类型。
: ^8 y  R' c8 D% |, `* O% ^x 的类型和 T 都是复数类型。
, D/ n8 g* B! g% v2 }- Y8 gx 是整数或字节片或符文,T 是字符串类型。
. g8 a) f# z, b* i/ z, |' X& F3 `x 是字符串,T 是字节或符文切片。[/ol]但
7 H0 r: p' l  d3 Y
    iAreaId := int(val)
    - w* a' V6 \0 C& ?  I
是不任何情况下1.-7。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则