接口为什么要特意的罗列出来呢?
- 因为go和传统的面向对象的编程语言不太一样,没有什么类和继承的概念.通过接口来实现面向对象。
- 而go的类也就是结构体
- 所以索性就放在一起讲了
- interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现。
请注意:此处限定是一组方法,既然是方法,就不能是变量。
而且是一组,表明可以有多个方法。
type i struct {
n1 int
n2 int
}
//如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现继承
//如果一个struct嵌套了另一个【有名】的结构体,那么这个模式叫做组合
//如果一个struct嵌套了多个匿名结构体,那么这个结构可以直接访问多个匿名结构体的方法,从而实现多重继承
type jian struct {
i
}
type jia struct {
i
}
首先创建1个i结构体为父结构体,接着创建两个子结构体。
type j interface {
j() int
}
接着我们创建一个接口,设置接口方法,这里跟iOS的代理差不多,通常设置出来的必须要创建,否则会报错
func (j *jian) j()int{
return j.n1 - j.n2
}
func (j *jia) j()int{
return j.n1 + j.n2
}
然后我们写两个结构体方法,两个方法名是相同的,这样我们就可以借助接口实现多态的概念,根据传入的对象而获取到不同的数据。
func face(face j){
fmt.Println(face.j())
}
func main(){
j1 := jia{i{10,31}}
j2 := jian{i{81,26}}
face(&j1)
face(&j2)
}
最后补充一点
接口的本质也是指针类型。
而空接口则就是object-c的 NSAny,swift里的Any了
可以的任意类型,但需要断言判断一下
断言的方式为.(类型) 返回值和ok两个参数,可以在if用一行判断结束。
有疑问加站长微信联系(非本文作者)