Go语言 接口(interface)
Go 语言提供了接口(interface)数据类型来实现面向对象的多态性。
Go 语言的接口是把具有共性的方法定义在一起,这些方法只有函数签名,没有具体的实现代码(类似于 Java 中的抽象函数)。任何其它类型只要实现了接口中定义的所有方法,那么这个类型实现了该接口。
Go 语言的接口是非侵入式的,也就是实现该接口的类型无需显式声明,只需要实现了接口中定义的所有方法即可。
1. 接口定义
type Namer interface { method1(param_list) return_list method2(param_list) return_list ... }
这里的 Namer 就是接口的名字,只要符合标识符的规则即可。通常约定的接口的名字最好以 er, r, able 结尾(视情况而定),比较直观易懂。
2. 接口特点
- 可以包含0个或多个方法的签名。
- 只定义方法的签名,不包含实现。
- 实现接口不需要显式的声明,只需实现相应方法即可。
3. 接口范例
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() }
在上面的例子中,我们定义了一个接口 Phone,接口里面有一个方法 call()。然后我们在 main 函数里面定义了一个 Phone 类型变量,并分别为之赋值为 NokiaPhone 和 IPhone。然后调用 call() 方法,输出结果如下:
I am Nokia, I can call you! I am iPhone, I can call you!
Go语言 类型转换:类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go语言不会对数据进行隐式的类型转换,只能手动去执行转换操作。Go语言 类型转换语法。类型转换需要注意的问题。Go语言 strconv 类型转换包。