一、前言
强类型语言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
}
三、运行截图