go快速学习_结构体-接口-结构体函数

接口为什么要特意的罗列出来呢?

  • 因为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用一行判断结束。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容