go version go1.11 windows/amd64
本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 接口类型(Interface types)。
接口类型应该是从软件设计上考虑才接入的类型,它本身不实现任何功能,但会 声明 一些功能。
在Go语言中,任何 实现 了接口类型中 声明 的功能的类型,都可以成为 实现了 某接口。
比如,声明一个 汽车接口,里面包含若干方法,任何实现了这个 汽车接口 的的类型 都可以被称为 汽车,不过,有些是 汽油柴油动力汽车,有些是电动汽车。
而且,一个类型可以实现多个接口,只要这个类型的 方法集 包含 某个 接口类型 所声明的文件,就可以称 这个类型实现了这个接口。
上面是阅读了官文后自己对 接口类型 和 其它类型、方法集 等概念的理解,下面是补充,涵盖怎么使用接口类型的的信息。
接口类型 中声明的方法 即使 接口类型的 方法集——不只是普通类型有方法集,接口类型也有。
可以用接口类型声明变量,未初始化的接口类型变量为 nil。
接口类型变量 可以存储 任何方法集涵盖了接口类型方法集 的类型 的值。
接口类型变量怎么初始化呢?new函数!下面是来自RUNOOB.COM的示例代码:
package main
import (
"fmt"
)
type Phone interface {
call()
}
type NokiaPhone struct {
}
func (nokiaPhone NokiaPhone) call() {
fmt.Println("I am Nokia, I can call you!")
}
type IPhone struct {
}
func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!")
}
func main() {
var phone Phone
phone = new(NokiaPhone)
phone.call()
phone = new(IPhone)
phone.call()
}