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

卖毛玉的小贩 · · 1396 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:卖毛玉的小贩

查看原文:go快速学习_结构体-接口-结构体函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1396 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传