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