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!

下一章:Golang 类型转换

Go语言 类型转换:类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go语言不会对数据进行隐式的类型转换,只能手动去执行转换操作。Go语言 类型转换语法。类型转换需要注意的问题。Go语言 strconv 类型转换包。