Golang中的接口
发布时间:2020-12-16 19:12:03 所属栏目:大数据 来源:网络整理
导读:软硬件环境 Windows 10 Go 1.8 什么是接口? 接口定义了一组方法,但是这些方法不包含实现的代码,另外接口里也不能包含变量。如下定义了一个接口 type intfNamer interface { Method1(param_list) return_type Method2(param_list) return_type ... } 为什
软硬件环境
什么是接口?接口定义了一组方法,但是这些方法不包含实现的代码,另外接口里也不能包含变量。如下定义了一个接口 type intfNamer interface {
Method1(param_list) return_type
Method2(param_list) return_type
...
}
为什么要设计接口?Go不是传统意义上的面向对象编程语言,它没有类及其继承的概念。接口是一种契约,实现类型必须满足它,它描述了类型的行为,规定类型可以做什么。接口彻底将类型能做什么,以及如何做分离开来,使得相同接口的变量在不同的时刻表现出不同的行为,这就是多态的本质。 简单接口示例package main
import (
"fmt"
)
type namer interface {
area() int
}
type rect struct {
width,height int
}
type square struct {
side int
}
func (r rect) area() int {
return r.height * r.width
}
func (s square) area() int {
return s.side * s.side
}
func main() {
var a = rect{4,3}
var b = square{6}
fmt.Println(a.area())
fmt.Println(b.area())
}
程序执行结果为 测试某个值是否实现了某个接口?type Stringer interface {
String() string
}
if sv,ok := v.(Stringer); ok {
fmt.Printf("v implements String(): %sn",sv.String()) // note: sv,not v
}
接口嵌套一个接口可以包含一个或者多个其它的接口,如下 type ReadWrite interface { Read(b Buffer) bool Write(b Buffer) bool }
type Lock interface { Lock() Unlock() }
type File interface { ReadWrite Lock Close() }
File接口包含了ReadWrite接口、Lock接口和方法Close,任何实现了File接口的类型同时也实现了接口ReadWrite和Lock 需要注意的点
接口方法中类型T和T*的区别type typeA struct {
}
type intfA interface {
func1()
}
func (a *typeA) func1() {
}
func func2(i intfA) {
i.func1()
}
var a typeA
上面的例子中,在a上调用func2时,会导致一个编译器错误,因为func2需要一个intfA,而它的方法func1之定义在指针上。 Go 语言规范定义了接口方法集的调用规则:
小结综上所述,接口就是一组方法的集合。 只要一个类型实现了某个接口中的方法,那么,这个接口类型的变量就可以接受这个类型的变量,而且同一个接口,可以接收不同类型的变量。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |