结构体可以用类来理解,方法可以用类内定义的函数来理解,有点搞不懂接口到底用来干嘛
Golang 中没有 class 的概念,而是通过 interface 类型转换支持在动态类型语言中常见的鸭子类型
从而达到运行时多态的效果。
简而言之,interface就是一组method的集合。 只要一个类型A实现了接口I中的method,那么在之后的使用时,这个接口I类型的变量便可以接受类型A的变量。这样在之后的使用中,同一个接口,可以接收不同类型的变量。
接口没什么高深之处,其作用就是对外隐藏实现:
type A interface {
Get(k string) interface{}
Set(k string, v interface{})
}
func NewA() A {
return &a{}
}
type a struct {
// ...
}
func (a0 *a) Get(k string) interface{} {
// ...
return nil
}
func (a0 *a) Set(k string, v interface{}) {
// ...
}
7 回答5.6k 阅读
6 回答7.1k 阅读✓ 已解决
4 回答2.5k 阅读
2 回答1.1k 阅读✓ 已解决
1 回答2.3k 阅读
2 回答1k 阅读
1 回答1.1k 阅读
如果说类是对数据和方法的抽象和封装,那么接口就是对类的抽象。
这里使用
Java
来说明,Java
中的接口与`Go
`中的接口是类似的,只不过Java
中要显式的声明实现某个接口,而Go
中不需要显式的声明实现了某个接口,只要实现了其中的所有方法,就默认为实现了该接口。比如说有一个Person接口:
有一个Student类实现了Person接口
有一个Teacher类也实现了Person接口
在某个类中可以这样使用
使用接口的好处是非常灵活,这样就与具体的实现做了解耦,如果以后有其他的实现类,只需要实现Person接口就可以了,而不用去改使用的时候的代码。