go语言中的继承和接口使用(八)
发布时间:2022-01-25 编辑: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><pre><code>1、初始化:
在go语言中,未进行显式初始化的变量都被初始化为该类型的零值,boo类型的零值为false,int类型的零值为0,,string类型的零值为空串。
在go语言中没有构造函数的概念,对象的创建由一个全局的创建函数来完成,以NewXXX命名,表示构造函数。
例如:
rect1 := new(Rect)
rect2 := &Rect{}
rect3 := &Rect{0,0,100,200}
rect4 := &Rect{width:100,height:200}
2、匿名组合:
go语言中的继承是通过匿名组合来实现的,这样子实现的继承更加灵活。
3、可见性:
go语言中的可见性是通过大小写来进行控制的,大写可以被其他包访问,小写只能被本包内部使用。
go语言中符号的访问性是包一级的,而不是类型一级的。
4、接口:
接口赋值:
1)将对象实例赋值给接口;
2)将一个接口赋值给另一个接口;
注意:
1)在go语言中将对象实例赋值给接口时,若不需要改变对象实例的值,则进行赋值时传递的是值传递;若需要修改对象实例的值,则需要进行引用传递
2)在go语言中将接口赋值给接口时,并需要互相赋值接口必须是等价的。如果接口A是接口B的子集,那么接口B可以赋值给接口A;
反之则会错误,因为这样做接口B无法调用接口A没有实现而自己已有的方法。
接口查询:
作用:接口转换
示例代码:
var file1 Writer = ...
// if 语句检查file1接口指向的对象实例是否实现了two.IStream接口,如果实现了则执行特定代码
if file2,ok := file1.(two.IStream);ok{
...
}
var file1 Writer = ...
// if 语句检查file1接口指向的对象实例是否是FIle* 类型,即对接口指向的对象类型进行判断。
if file2,ok := file1.(two.IStream);ok{
...
}
接口组合:
接口组合是类型匿名组合的特定场景,其只包含方法,不包含任何成员变量。
例如:
//ReadWrite接口组合了Reader和Writer接口
type ReadWriter interface{
Reader
Writer
}
上面的操作实质是等同于如下写法:
type ReadWriter interface{
Reader(p[] byte)(n ing,err error)
Writer(p[] byte)(n ing,err error)
}
Any类型接口:
Any类型接口可以指向任何对象,接受任意的对象实例,表示为interface{}.典型例子:fmt包中的PrintXX函数
var v1 interface{} =1
var v2 interface{} = "abc"
</code></pre>
<pre class="prettyprint"><code class=" hljs go">接口之间赋值实例:
<span class="hljs-keyword">package</span> main
<span class="hljs-keyword">import</span> <span class="hljs-string">"fmt"</span>
<span class="hljs-keyword">type</span> Integer <span class="hljs-typename">int</span>
<span class="hljs-keyword">func</span> (a Integer) Less(b Integer) <span class="hljs-typename">bool</span>{
ret := a < b
fmt.Println(ret)
<span class="hljs-keyword">return</span> ret
}
<span class="hljs-keyword">func</span> (a* Integer) Add(b Integer){
*a = b
}
<span class="hljs-keyword">type</span> LessAdder <span class="hljs-keyword">interface</span>{
Less(b Integer) <span class="hljs-typename">bool</span>
Add(b Integer)
}
<span class="hljs-keyword">type</span> Lesser <span class="hljs-keyword">interface</span>{
Less(b Integer) <span class="hljs-typename">bool</span>
}
<span class="hljs-keyword">func</span> main(){
<span class="hljs-comment">//对象实例赋值给接口</span>
<span class="hljs-keyword">var</span> a Integer =<span class="hljs-number"> 1</span>
<span class="hljs-keyword">var</span> b LessAdder = &a <span class="hljs-comment">//在这里应该将类的引用赋值给接口,以便能够实现方法Addr()改变对象的值的作用,如果不需要改变对象的值则不需要传递类的引用</span>
b.Add<span class="hljs-number">(123</span>)
<span class="hljs-keyword">var</span> b1 Lesser = &a
result := b1.Less<span class="hljs-number">(12</span>)
fmt.Println(result)
} </code></pre>
到此这篇关于“go语言中的继承和接口使用(八)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
go语言中的继承和接口使用(八)
想系统学习GO语言(Golang
【Go语言入门系列】(八)Go语言是不是面向对象语言?
Go 语言到底适合干什么?
go语言学习-接口赋值的两种类型
【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
浅谈golang中的接口
Go语言学习3----Go语言特色
Go语言发展历史、核心、特性及学习路线
兄弟连golang神技(1)-关于 Go 语言的介绍
[关闭]