教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go语言学习-接口赋值的两种类型

go语言学习-接口赋值的两种类型

发布时间:2022-02-02   编辑:jiaochengji.com
教程集为您提供go语言学习-接口赋值的两种类型等资源,欢迎您收藏本站,我们将为您提供最新的go语言学习-接口赋值的两种类型资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

接口赋值在go语言中分为下面两种情况:

<ol><li>将对象实例赋值给接口
在我看来go语言的接口就是c 中虚函数的声明,使用者可以根据自身使用的需要声明一个函数的集合,将需要的方法都在接口中声明,有点像c 中,子类继承父类之后,通过子类对象给父类赋值,因为父类有的方法(除私有方法)子类肯定都有,尤其是虚函数,这样比C 好的地方是go语言中不需要通过继承的方式来实现多态,不同的对象只需要将接口中的所有方法都实现即可,本质上和c 一样,实现这些接口的对象相当于子类,这个接口相当于父类,不同的地方go语言中少了继承的过程,耦合度更低。</li><li>将一个接口赋值给另一个接口(同理)</li></ol>

将对象实例赋值给接口

这要求该对象实例实现了所有该接口提供的方法,下面是代码实例:

<pre><code>package main import ( "fmt" ) type Integer int func (a Integer)Less(b Integer) bool{ return a<b } func (a *Integer)Add(b Integer) { *a = b } type Lesser interface { Less(b Integer) bool } type LessAdder interface { Less(b Integer) bool Add(b Integer) } func main(){ fmt.Println("start ...") var inter Integer = 1 var lesser Lesser = inter isLess := lesser.Less(3) fmt.Println(lesser,"less 3 is ",isLess) var lessAdder LessAdder = &inter lessAdder.Add(3) fmt.Println("lessAdder add 3 is ",inter) //fmt.Println("lessAdder is ",*lessAdder) //该条语句不能通过编译 } </code></pre>

第二种方法通过一个接口给另一个接口赋值,在go语言中只要两个接口拥有同样的方法列表(次序不同不要紧),那么他们就是等同的,可以相互赋值

<pre><code>package one type ReadWriter interface{ Read(buf []byte)(n int,err error) Write(buf []byte)(n int,err error) } package two type Istream interface{ Read(buf []byte)(n int,err error) Write(buf []byte)(n int,err error) } var file1 one.ReadWriter = new(file) var file2 two.Istream = file1 var file3 one.ReadWriter = file2 </code></pre>

在go语言中,这两个接口是等价的,因为:

<ol><li>任何实现了one.ReadWriter接口的类,均实现了two.ReadWriter</li><li>任何one.ReadWriter的接口可以赋值给two.ReadWriter,反之亦然</li><li>在任何地方使用two.ReadWriter的接口和使用one.ReadWriter的接口没有差别</li></ol>

接口赋值并不是要求两个接口是等价的,如果A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A,但是反过来就不成立

到此这篇关于“go语言学习-接口赋值的两种类型”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go语言学习-接口赋值的两种类型
go语言学习笔记(十三)——接口类型
基于类型系统的面向对象编程语言Go
go struct 成员变量后面再加个字符串是什么意思?_Go语言的学习笔记(第十章) 接口...
Go语言基础之接口(面向对象编程下)
第07章 Go语言接口(interface),Golang接口(interface)
Go语言学习(十五)面向对象编程-接口
go 语言学习历程
【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
浅谈golang中的接口

[关闭]
~ ~