在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 定义接口定义了一组抽象方法(方法集); 接口中不能定义变量; type Namer interface { Method1(param_list) return_type Method2(param_list) return_type ... } 永远不要使用一个指针指向一个接口类型,因为它已经是一个指针。 1.1 接口名称1. 一般以方法名加 [e]r 后缀结尾,比如 Printer、Reader、Writer、Logger; 2. 以 able 后缀结尾,如 Closeable、Cloneable; 3. 以 I 开头(大写的i); 1.2 接口方法一般接口中的方法比较少,0-3个; 2. 接口类型go 中的接口一般有两种,一种是包含方法定义的接口,一种是不包含方法定义的空接口; go 语言实现时用两种结构体表示不同的接口,iface 结构体表示包含方法定义的接口,eface 结构体表示空接口; 3. 接口实现方式在Java中,实现 接口时通过 implements 接口名 来显示实现接口,并在实现类中实现接口的所有方法; 在 go 中,接口都是隐式实现的,实现类只需要实现接口中的全部方法就隐式实现了这个接口; 3.1 接口方法的实现和调用接口的方法定义中没有限制方法的接收者为结构体还是结构体指针,接收者类型两者都可以,只能二选一; 根据方法接收者类型和方法传入的参数情况,有以下几种情况:
接收者类型和传入参数类型相同时编译通过理所当然,下面讨论一下两种类型不同的情况; 1. 当接收者类型为结构体时,传入结构体指针编译通过,指针编译通过是因为指针通过解引用可以得到引用指向的结构体; 2. 当接收者类型为结构体指针时,传入结构体编译不通过,因为通过结构体不能找到唯一确定的结构体指向的指针,(纯属瞎猜,这里有答案,没看懂,手动狗头) 4. 接口嵌套类似Java中的接口继承; 一个接口可以包含一个或者多个其他类型的接口,此时相当于该接口也定义了内嵌接口的方法; 比如接口 File包含了ReadWrite 和 Lock 的所有方法,它还额外有一个 Close() 方法。 type ReadWrite interface { Read(b Buffer) bool Write(b Buffer) bool } type Lock interface { Lock() Unlock() } type File interface { ReadWrite Lock Close() }
|
请发表评论