回答

收藏

将 interface{} 转换为 int

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

我试图从 JSON获得一个值并将其转换为 int 但它不起作用,我不知道如何正确执行。
# Y6 ?9 Q" E: c9 |/ R这是错消息:
- n9 W* ]3 q8 ]& ~8 c+ F, s- ^
    ...cannot convert val (type interface {}) to type int: need type assertion4 P* M! _# y$ n' ^0 V
和代码:2 p, ^. l3 ?" g- G5 h4 R8 W* e+ ^+ r

    7 ?$ y9 G% @7 k% h6 S, [! e. Y
  •     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)
    6 z6 a; h! h" C8 G" ]6 A
你想要一个类型的断言:2 f: m  N) v9 r, h2 l0 e( y  P# I
    iAreaId := val.(int)iAreaId,ok := val.(int) // Alt. non panicking version
    ) [- ?. w' P+ A( o- t' U; o/ u
接口类型值不能转换的原因是参考规范中的这些规则:
/ j3 \' E7 O7 U3 q6 @+ ?转换是一种形式T(x)where Tis a type and xis a expression that can convert to type T.& M) c0 Z7 o- W1 s' n- |* [. T

9 S8 ]+ w! a& r  F' v2 N- o在以下任何情况下,非常值 x 可转换为类型  T:4 R2 Z# ]9 T* [0 ~! t/ \: s
[ol]x 可分配给 T。& e, q: a. p5 \6 e# l
x 的类型和 T 基础类型相同。
, u& p' A. w! \2 r# rx 的类型和 T 是未命名的指针类型,其指针基类型具有相同的底层类型。
4 l  y/ e3 u. M9 ix 的类型和 T 是整数或浮点类型。) U  z' q; _2 u
x 的类型和 T 都是复数类型。
- ^/ p6 x- m$ i7 i1 J+ Lx 是整数或字节片或符文,T 是字符串类型。4 \- _  g" V. A3 v; c
x 是字符串,T 是字节或符文切片。[/ol]但
* S% E/ B! o4 K: d* L& s" ?
    iAreaId := int(val)
    ! O  n5 w1 w0 S% R% f
是不任何情况下1.-7。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则