Go 接口
Posted louyefeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 接口相关的知识,希望对你有一定的参考价值。
Go 接口
在Go语言中,一个类只需要实现接口要求的所有函数,那这个类就实现了该接口。
语法:
type Namer interface
method1(param_list) return_list
method2(param_list) return_list
...
实现接口
上面提到接口的实现非常简单,只要类实现接口中的所有函数就可以了,这种不需要显式的声明接口的方式也被称为非侵入式接口。
案例:
package main
import "fmt"
type Animal interface
Run()
Eat(food string)
type Cat struct
type Dog struct
func (c Cat) Run()
fmt.Println("猫在跑")
func (c Cat) Eat(food string)
fmt.Printf("猫在吃%v", food)
func (d Dog) Run()
fmt.Println("狗在跑")
func (d Dog) Eat(food string)
fmt.Printf("狗在吃%v", food)
func main()
cat := new(Cat)
cat.Eat("鱼")
cat.Run()
dog := Dog
dog.Eat("骨头")
dog.Run()
上方定义了一个Animal接口,该接口包含了两个函数(Run和Eat函数),然后定义了Cat和Dog结构体,并实现了这两个函数,这就是一个简单的实现接口的案例。
接口赋值给接口
首先定义两个接口
type Animal1 interface
Run()
Eat()
type Animal2 interface
Run()
func main()
var a1 Ainmal1
var a2 Ainmal2
//a1 = a2 报错
a2 = a1
这里会如果将a2赋值给a1的话会报出Animal2 does not implement Animal 1(missing Eat method)
的错误,因为a2中并没有Eat方法,所以只有包含另一个接口所有函数的接口,才能赋值给另一个接口,就是小接口 = 大接口
接口类型查询
Go语言任何对象实例都实现了空接口interface,空接口也可以接收任何值。
如:
var v1 interface = 1
var v2 interface = "yven"
var v3 interface = 1.234
var v4 interface = make(map[string] int)
var v5 interface = func()
空接口的应用在很多地方都有使用到
如:
func Println(a ...interface)
因为可以接收任何值,但是不知道接收到的值是什么类型的,所以我们可以对接收到的类型进行判断,也就是类型查询,可以使用Comma-ok断言
,如:
var v1 interface = 123
if v, ok := v1.(int); ok
fmt.Printf("%v 是int类型",v1)
else
fmt.Printf("%v 不是int类型",v1)
也可以使用接口.(type)来进行判断.不过要和switch一起使用才行,如:
var v2 interface = "yven"
switch v2.(type)
case int:
fmt.Println("v2是int类型")
case float64:
fmt.Println("v2是float类型")
case map[string]int:
fmt.Println("v2是map类型")
以上是关于Go 接口的主要内容,如果未能解决你的问题,请参考以下文章