一、前言
强类型语言interface{}interface
二、代码
package main

import "fmt"

func main() {
	data := getData()

	//断言string类型的name
	if name, ok := data["name"].(string); ok { //断言data["name"]的值[张三]为string类型
		fmt.Printf("姓名存在为:%s \n", name)
	}

	//断言is_collect
	isCollect, ok := data["is_collect"].(bool) //断言data["is_collect"]的值是bool类型
	if ok {
		fmt.Printf("is_collect存在,为 %t \n", isCollect)
	}

	//断言days
	days, ok := data["days"].([]int64) //data["days"]的值的类型是[]int64一维数组
	if ok {
		for _, value := range days {
			fmt.Printf("day的值为:%d \n", value)
		}
	}

	//断言like
	like, ok := data["like"].(map[string]interface{}) //data["like"]的值的类型为map[string]interface{}
	if ok {
		hobbys := like["hobby"].([]string) //like["hobby"]的值是一个string一维数组
		for _, value := range hobbys {
			fmt.Printf("爱好:%s \n", value)
		}
	}

	//断言interface
	interfaceData, ok := data["interface"].([]interface{}) //断言data["interface"]的值为[]interface{}
	if ok {
		fmt.Println("interface数据为------")
		for _, value := range interfaceData {
			fmt.Println(value)
		}
	}

	//断言异常测试:这个data["name"]的值是string类型
	//我们在这里断言为bool类型,程序报错:panic: interface conversion: interface {} is string, not bool
	//这个interface{}是string类型,不是bool类型
	errorName := data["name"].(bool)
	fmt.Print(errorName)
}

//自定义数据:用于断言
func getData() map[string]interface{} {
	data := make(map[string]interface{}) //定义待返回的数据结构

	//string
	data["name"] = "张三"

	//bool类型
	data["is_collect"] = true

	//[]int64类型,星期1-星期7,
	days := []int64{1, 2, 3, 4, 5, 6, 7}
	data["days"] = days

	//爱好,map[string]interface类型
	like := map[string]interface{}{
		"hobby": []string{"读书", "读书", "还是读书"},
	}
	data["like"] = like

	//[]interface{}类型
	interfaceData := []interface{}{"姓名", 1, true, 3.14}
	data["interface"] = interfaceData

	return data
}
三、运行截图