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()
}
}
}