GO空接口定义和使用及类型断言
空接口的使用
package main import "fmt" func main0701() { var i interface{} //接口类型可以接收任意类型数据 //fmt.Printf("%T\n", i) //i = 10 //fmt.Printf("%T\n", i) //fmt.Println(i) //i = 3.14 //fmt.Printf("%T\n", i) //fmt.Println(i) //i = "传智播客" //fmt.Printf("%T\n", i) //fmt.Println(i) i = 10 //接口类型 不能直接进行转换需要使用类型断言 //var a int =20 //var a interface{} //a = 20 fmt.Println(i) } func test() { fmt.Println("test hello world") } func main0702() { //空接口类型的切片 var i []interface{} //fmt.Printf("%T\n",i) i = append(i, 10, 3.14, "传智播客", test) for idx := 0; idx < len(i); idx++ { fmt.Println(i[idx]) } }
类型断言 对空接口变量的类型赋值和判断
package main import "fmt" func main0801() { var i interface{} i = 10.234 //value,ok:=map[key] //值,值的判断:=接口变量.(数据类型) value, ok := i.(int) if ok { fmt.Println("整型数据:", value+10) } else { fmt.Println("错误") } } func demo() { fmt.Println("demo hello world") } func main() { var i []interface{} i = append(i, 10, 3.14, "传智播客", demo,123,test) for _, v := range i { //fmt.Println(idx,v) if data, ok := v.(int); ok { fmt.Println("整型数据:", data) } else if data, ok := v.(float64); ok { fmt.Println("浮点型数据:", data) } else if data, ok := v.(string); ok { fmt.Println("字符串数据:", data) } else if data, ok := v.(func()); ok { //函数调用 data() } } }