...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" ?