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.")  
        }  
    }  
}