package main
import"fmt"funcmain(){// 准备工作
x :=&[]int{1,2,3}var i interface{}
i = x
// if 断言, 将 iSender 断言为 Phone 的指针// ok 为真则表示断言成功, v 为断言后的类型和值// ok 为假则表示断言失败, v 为对应类型的空值
v, ok := i.(int)if ok {
fmt.Printf("断言成功, %T, %v", v, v)}else{
fmt.Printf("断言失败, %T, %v", v, v)}// switch 断言switch v := i.(type){caseint:// 根据 int 类型处理// do sth.casestring:// 根据 string 类型处理// do sth.default:// 默认提示}}
补充知识
空接口
没有实现 任何func 的接口, 就是空接口
任何类型都实现了空接口, 空接口可以接收任意类型的值
package main
import"fmt"funcmain(){// 创建一个空接口var i interface{}
i =10
fmt.Printf("%T, %[1]v, %T\n", i,&i)// int, 10, *interface {}
i ="10"
fmt.Printf("%T, %[1]v, %T\n", i,&i)// string, 10, *interface {}
i =[1]int{10}
fmt.Printf("%T, %[1]v, %T\n", i,&i)// [1]int, [10], *interface {}
i =[]int{10}
fmt.Printf("%T, %[1]v, %T\n", i,&i)// []int, [10], *interface {}
i = t{}
fmt.Printf("%T, %[1]v, %T\n", i,&i)// main.t, {}, *interface {}}