刚接触golang,关于接口有些疑惑。好像用方法可以实现的逻辑,为啥非要用接口呢? 接口反而麻烦,多写几行代码了。比如下面代码
相关代码
package main
import "fmt"
type Humen struct {
name string
age int
}
type Supermen struct {
Humen
arms string
}
type ableser interface {
run()
fly()
}
func (a Humen) run() {
fmt.Printf(" %s run ...\n", a.name)
}
func (a Supermen) fly() {
fmt.Printf(" %s fly ...\n", a.name)
}
func main() {
a := Supermen{
Humen: Humen{
name: "yase",
age: 20,
},
arms: "fly",
}
// 接受者可以直接调用run, 岂不更方便
a.run()
// interface
var ifer ableser
// 疑惑: (接口能做的事情,39行不就可以了吗?) 这里又要初始化interface,感觉唯一的区别是: 保证持有对象都实现了所有方法, run和fly 2个都要实现, 真的是这样吗? 就一个约束吗?
ifer = a
ifer.run()
//ifer.fly()
}
问题是:
接口岂不是多此一举, 方法的接口器直接调用就完了, 干嘛又要用接口再去实现一遍呢? 有何不同吗?
我举个例子来说明下接口的用途吧。
什么是接口,接口的作用是用来通讯的吧,通讯就涉及到客户端和服务端。
现在假设你写了一个开源的包,比如叫:gRPC。我们这里把gRPC内部的服务称为服务端,而把调用gRPC的应用称作客户端。
现在在双方通讯过程中有这么一个需求,当在客户端调用服务端方法的时候,服务端同时也需要执行客户端的特定方法。
这个需求怎么实现?gRPC包必须定义一个接口,这个接口只有一些函数定义,没有具体实现。而实现这个接口需要由客户端来做。
客户端只有全部实现了服务端的接口函数,服务端才能执行客户端的函数。
希望这个例子您能够理解。