Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
> interface是方法的集合
> interface是一种类型
~~~
/* 定义接口 */
type interface_name interface {
method_name1 [return_type]
method_name2 [return_type]
method_name3 [return_type]
...
method_namen [return_type]
}
/* 定义结构体 */
type struct_name struct {
/* variables */
}
/* 实现接口方法 */
func (struct_name_variable struct_name) method_name1() [return_type] {
/* 方法实现 */
}
~~~
## 一、示例
~~~
package main
import (
"fmt"
)
type Phone interface {
call()
}
type IPhone struct {
}
func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!")
}
func main() {
var phone Phone
phone = new(IPhone)
phone.call()
}
~~~
结果:
~~~
I am iPhone, I can call you!
~~~
## 二、接口数组和形参
~~~
package main
import "fmt"
type Animal interface {
Speak() string
}
type Cat struct{}
func (c Cat) Speak() string {
return "cat"
}
type Dog struct{}
func (d Dog) Speak() string {
return "dog"
}
func Test(params interface{}) {
fmt.Println(params)
}
func main() {
animals := []Animal{Cat{}, Dog{}}
for _, animal := range animals {
fmt.Println(animal.Speak())
}
Test("string")
Test(123)
Test(true)
}
~~~
结果:
~~~
cat
dog
string
123
true
~~~