package main import"fmt" // 定义一个空接口 type A interface { } funcmain() { // 声明变量 var a A // 保存整型 a = 10 fmt.Printf("保存整型: %v \n", a) // 保存字符串 a = "hello word" fmt.Printf("保存字符串: %v \n", a) // 保存数组 a = [3]float32{1.0, 2.0, 3.0} fmt.Printf("保存数组: %v \n", a) // 保存切片 a = []string{"您", "好"} fmt.Printf("保存切片: %v \n", a) // 保存Map a = map[string]int{ "张三": 22, "李四": 25, } fmt.Printf("保存map: %v \n", a) // 保存结构体 a = struct { name string age int }{"王麻子", 40} fmt.Printf("保存结构体: %v \n", a)
// 声明一个空接口切片 var aa []A // 保存任意类型数据到切片中 aa = append(aa, 23, []string{"php", "go"}, map[string]int{"a": 1, "b": 2}, struct { city,province string
package main import"fmt" // 定义一个空接口 type I interface { }
funcmain() { // 声明变量num num := 10 // 把变量num存到空接口中 var i I = num fmt.Printf("输出变量i: %v \n", i) // 从空接口中取出值,赋值给新的变量 var c int = i // (!!! 这里会报错) fmt.Printf("输出变量c: %v \n", c) } /** 输出 ./main.go:16:6: cannot use i (type I) as type int in assignment: need type assertion */
正确示例:
package main import"fmt" // 定义一个空接口 type I interface { } funcmain() { // 声明变量num num := 10 // 把变量num存到空接口中 var i I = num fmt.Printf("输出变量i: %v \n", i) // 从空接口中取出值,赋值给新的变量 var c int = i.(int) fmt.Printf("输出变量c: %v \n", c) } /** 输出变量i: 10 输出变量c: 10 */
package main import"fmt" // 定义一个空接口 type I interface { }
funcmain() { // 声明变量 var a I // 保存整型 a = 10 printType(a) printType2(a) // 保存字符串 a = "hello word" printType(a) printType2(a) // 保存数组 a = [3]float32{1.0, 2.0, 3.0} printType(a) printType2(a) // 保存切片 a = []string{"您", "好"} printType(a) printType2(a) // 保存Map a = map[string]string{ "张三": "男", "小丽": "女", } printType(a) printType2(a) // 保存结构体 a = people{"刘山", 32} printType(a) printType2(a) } // 定义结构体 type people struct { name string age int }
// 方式一 funcprintType(i I) { if t, ok := i.(int); ok { echo(t) } elseif t, ok := i.(string); ok { echo(t) } elseif t, ok := i.(map[string]string); ok { echo(t) } elseif t, ok := i.([]int); ok { echo(t) } elseif t, ok := i.([3]string); ok { echo(t) } elseif t, ok := i.(people); ok { echo(t) } }