1.问题背景:
json.Unmarshal([]byte(data), &m))var m map[string]interface{}m[“access_token”]类型断言
2.解决方法:
value.(type)
var data interface{}
data = "hahhhh"
var data1 string
data1 = data.(string)
fmt.Println(data1)//输出hahhhh
//但如果是data的类型不为string时,将会报错,如下。
data2 := data.(int) //会产生错误,错误原因如下
3.总结:
情形一:
从上述的解释来看,好像我项目里直接写.(string)好像也不是很严谨,应该进行类型的判断,然后在进行赋值操作,只不是我那里的m[“access_token”]必定是string类型,所以不会出现错误。
推荐以下方法,先进行类型断言:
if value, ok := m["access_token"].(string); ok {
fmt.Println("类型判断成功", value) //输出--->类型判断成功 hahhhh
}
情形二:
或者存在未知数据类型的情况时,我们可以用type-switch方法(参考Go语言中文网),如下所示:
func MyPrintf(args ...interface{}) {
for _, arg := range args {
switch arg.(type) {
case int:
fmt.Println(arg, "is an int value.")
case string:
fmt.Println(arg, "is a string value.")
case int64:
fmt.Println(arg, "is an int64 value.")
default:
fmt.Println(arg, "is an unknown type.")
}
}
}