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 }