go语言的interface的基本用法、性质
什么是go语言的interface
go语言当中,interface是method方法的集合。interface这个单词翻译过来就是接口的意思,为了方便理解和加深对go语言的interface的记忆,我们大可往接口的方面进行联想,比如手机的充电接口,前段时间不是有新闻报道说欧洲颁布了什么规定,要各个手机品牌商要设计一样的充电口吗。
是的,go语言的interface就像这手机充电口,不管是安卓机,还是苹果机,都可以使用,而且可以满足不同的充电机制。也就是interface的机制大概可分为如下两点:
- 实现统一的接口(成为接口类型的数据);
- 利用统一的接口各干各的事(方法的不同实现方式)。
interface类型
如果一个对象实现了method1、method2、method3方法,那么method1、method2、method3的组合便称为interface。该对象便是该interface类型。如果另一个对象也实现了这三种方法,那么这个对象也是该interface类型。
interface的基本语法,如下:
type interfaceName interface {
method1(args)
method2(args)
method3(args)
......
methodN(args)
}
interface实例
package main
import "fmt"
type Prolan struct{}
type Python struct {
Prolan
Lan string
}
type Go struct {
Prolan
Lan string
}
func (p Prolan) Basic() {
fmt.Println("计算机编程语言可以用来编程!")
}
func (p Python) Do() {
fmt.Println(p.Lan)
fmt.Println("可以用来开发web、机器学习、人工智能!")
}
func (p Python) Superiority(y string) {
p.Lan = p.Lan + y
fmt.Println(p.Lan)
}
func (p Python) Unsuper() {
fmt.Println("python的劣势是其性能不高!")
}
func (g Go) Do() {
fmt.Println(g.Lan)
fmt.Println("可以用来开发服务器、云计算、区块链等")
}
func (g Go) Superiority(y string) {
g.Lan = g.Lan + y
fmt.Println(g.Lan)
}
type C interface {
Basic()
Do()
Superiority(y string)
}
type Unc interface {
Basic()
Do()
Superiority(y string)
Unsuper()
}
func main() {
var p Python
p.Lan = "python是高级的解释型语言。"
var g Go
g.Lan = "go是高级的编译型语言。"
var c C
c = p
c.Basic()
c.Do()
c.Superiority("简单、简洁、开发效率高")
c = g
c.Basic()
c.Do()
c.Superiority("高性能,被誉为互联网的c语言")
var unc Unc
unc = p
unc.Unsuper()
}
代码输出:
计算机编程语言可以用来编程!
python是高级的解释型语言。
可以用来开发web、机器学习、人工智能!
python是高级的解释型语言。简单、简洁、开发效率高
计算机编程语言可以用来编程!
go是高级的编译型语言。
可以用来开发服务器、云计算、区块链等
go是高级的编译型语言。高性能,被誉为互联网的c语言
python的劣势是其性能不高!
代码解析
如上代码,我们可以对go语言的interface结构简单总结如下几点:
- interface是方法的组合;
- 要称为特定interface的类型,必须实现该interface里的所有方法,比如Python和Go都实现了两种Do和Superiority,继承了一种Basic,所以可以用interface C的类型来实现,但是Python多实现了Unsuper,而Go没有,所以Python又可以用interface Unc来实现,而Go则不能。