接口
* 接口,方法的集合,interface来定义
//定义接口 interface ,方法的集合type USB interface{ input() //输入方法 output() //输出方法}//结构体type mouse struct{ name string}type keyBoard struct{ name string}//结构体实现了接口中的所以方法代表实现了这个接口,否则不算实现接口func (m mouse) output(){ fmt.Println("output")}func (m mouse) input(){ fmt.Println("input")}func (k keyBoard) output(){ fmt.Println(k.name,"output")}func (k keyBoard) input(){ fmt.Println(k.name,"input")}//接口调用测试func test(u USB){ u.input() u.output()}func main() { m:=mouse{name: "雷蛇"} test(m) k:=keyBoard{name: "罗技"} test(k)}
空接口
* 不包含任何方法,所有结构体默认实现了空接口,空接口可以存储任何类型
//定义空接口type A interface{}//结构体type dog struct{ name string}type cat struct{ name string}//测试接口func test(a A){ fmt.Println(a)}func main() { //空接口可以接收任意类型 var a A=dog{name: "a"} var b A=cat{name: "b"} var c A=1 var d A="qwe" fmt.Println(a) fmt.Println(b) fmt.Println(c) fmt.Println(d)}
接口嵌套
* 接口中嵌套接口
//接口type A interface{ test1()}type B interface{ test2()}type C interface{ //导入A、B接口 A B test3()}//结构体,实现C接口type dog struct{}func (d dog) test1(){ fmt.Println("test1")} func (d dog) test2(){ fmt.Println("test2")}func(d dog) test3(){ fmt.Println("test3")}func main() { //dog有4个形态:dog,A,B,C var d dog =dog{} d.test1() d.test2() d.test3()}
接口断言
* 检查接口类型的变量是不是符合期望值 * 被断言的对象必须是接口类型 * 通过switch i .(type) case 来判断
//接口type A interface{} func testA(i interface{}){ //switct i.(type) 断言 switch i.(type){ case string: fmt.Println("string") case int: fmt.Println("int") case A: fmt.Println("A") case nil: fmt.Println("nil") case interface{}: fmt.Println("interface{}") default: fmt.Println("未知") }}func main() { testA("string") testA(1) var a A var a1 A=1 testA(a) testA(a1)}