回答

收藏

将 interface{} 转换为 int

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

我试图从 JSON获得一个值并将其转换为 int 但它不起作用,我不知道如何正确执行。
1 \2 {) l3 r, c1 f4 h这是错消息:
: j' x$ R8 l! ^! y! y: f# ?
    ...cannot convert val (type interface {}) to type int: need type assertion4 b, x  m$ U. Q* E- E
和代码:5 I: ^; }( m3 Z  {) ]: i

    . k& u6 \$ K/ w  w4 E/ O6 G% f
  •     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)1 |6 i: {5 N5 T# X. N
你想要一个类型的断言:/ z1 d- _5 [( e% Z
    iAreaId := val.(int)iAreaId,ok := val.(int) // Alt. non panicking version
    ' a8 M4 e" @/ \6 |5 N" ]- s: D
接口类型值不能转换的原因是参考规范中的这些规则:: w, K/ y' E9 h$ Q, }8 Q8 y' @
转换是一种形式T(x)where Tis a type and xis a expression that can convert to type T.( r; C7 O  m5 {( N3 Q3 A
! x( _+ U/ q9 @
在以下任何情况下,非常值 x 可转换为类型  T:% t8 j" W3 d: S) @
[ol]x 可分配给 T。& S* G% W* A& k, W% T/ Z
x 的类型和 T 基础类型相同。4 i! G; F4 D* s2 f* w
x 的类型和 T 是未命名的指针类型,其指针基类型具有相同的底层类型。' E* z! }$ {3 R- H8 Q7 M* a
x 的类型和 T 是整数或浮点类型。- z- e+ k% k  O9 W" U: g  m
x 的类型和 T 都是复数类型。
: l/ Z3 C6 b+ ~+ \, i: Px 是整数或字节片或符文,T 是字符串类型。4 g. T4 E% r) e% x8 g# D0 W& p
x 是字符串,T 是字节或符文切片。[/ol]但4 Z, ?% C+ f5 Q  P' i6 _: o! ^; R
    iAreaId := int(val)/ U7 \3 X# g( j* ~+ T* W$ {
是不任何情况下1.-7。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则