空接口的使用

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

}