1 package main 2 3 import "fmt" 4 5 // 1.定义接口 6 type USB interface { 7 start() //USB设备开始工作 8 end() //USB设备结束工作 9 } 10 11 // 2.实现类 12 type Mouse struct { 13 name string 14 } 15 16 type FlashDisk struct { 17 name string 18 } 19 20 func (m Mouse) start() { 21 fmt.Println(m.name, "鼠标,准备就绪,可以开始工作了,点点点。。") 22 } 23 func (m Mouse) end() { 24 fmt.Println(m.name, "结束工作,可以安全退出。。") 25 } 26 27 func (f FlashDisk) start() { 28 fmt.Println(f.name, "准备开始工作,可以进行数据的存储。。") 29 } 30 func (f FlashDisk) end() { 31 fmt.Println(f.name, "可以弹出。。") 32 } 33 34 func (f FlashDisk) deleteData() { 35 fmt.Println(f.name, "U盘删除数据。。") 36 } 37 38 // 3.测试方法 传递的是一个接口类型,就是为了执行接口内所有的方法 39 func testInterface(usb USB) { //usb = m1 usb = f1 40 usb.start() 41 usb.end() 42 } 43 44 func main() { 45 /* 46 接口:interface 47 在Go中,接口是一组方法签名。 48 49 当某个类型为这个接口中的所有方法提供了方法的实现,它被称为实现接口。 50 51 Go语言中,接口和类型的实现关系,是非侵入式 52 53 //其他语言中,要显示的定义 54 class Mouse implements USB{} 55 56 1.当需要接口类型的对象时,可以使用任意实现类对象代替 57 2.接口对象不能访问实现类中的属性 58 59 60 多态:一个事物的多种形态 61 go语言通过接口模拟多态 62 63 就一个接口的实现 64 1.看成实现本身的类型,能够访问实现类中的属性和方法 65 2.看成是对应的接口类型,那就只能够访问接口中的方法 66 67 接口的用法: 68 1.一个函数如果接受接口类型作为参数,那么实际上可以传入该接口的任意实现类型对象作为参数。 69 2.定义一个类型为接口类型,实际上可以赋值为任意实现类的对象 70 71 72 鸭子类型: 73 74 */ 75 76 // 1.创建Mouse类型 77 m1 := Mouse{"罗技小红"} 78 fmt.Println(m1.name) 79 80 // 2.创建FlashDisk 81 f1 := FlashDisk{"闪迪64G"} 82 fmt.Println(f1.name) 83 84 testInterface(m1) 85 testInterface(f1) 86 87 var usb USB 88 usb = f1 89 usb.start() 90 usb.end() 91 92 f1.deleteData() // 自己独有的方法 93 94 var arr [3]USB // 接口是一种类型 95 arr[0] = m1 96 arr[1] = f1 97 fmt.Println(arr) // [{罗技小红} {闪迪64G} <nil>] 98 }