golang Interface

golang 接口

接口可以理解为某一个方面的抽象,可以是多对一的(多个类型实现一个接口),是多态的体现。

接口是一组包含方法名、参数、返回值的未具体实现的方法的集合。

实现方式

1
2
3
4
type interfaceName interface { 
// 方法列表
GetName() string
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import "fmt"

type interfaceName interface {
// 方法列表
GetName() string
GetAge() int
}

type Name struct { //定义结构体
name string
age int
}

func (s Name) GetName() string { //实现两个方法
return s.name
}

func (s Name) GetAge() int {
return s.age
}

func main(){

s := Name{"roddy",28} //声明一个对象
a := s.GetName()
fmt.Println(a,s.GetAge(),s.age) //调用对象中的方法


}

空接口

空接口就是不包含任何方法的接口。所有类型都实现了空接口,并且空接口可以存任何类型的数据。

1
2
3
4
5
var allData interface{}

allData = 234

fmt.Println(allData,reflect.TypeOf(allData))

覆盖变量值

1
2
3
4
5
6
7
8
9
10
11
12
13
var allData interface{}
var allList interface{}

allData = 234

fmt.Println(allData,reflect.TypeOf(allData))

m :=123
ms := "check all"

allList = m
allList = ms //可覆盖此前的变量值
fmt.Println(allList) //此时的输出就为check all

接口零值

接口的默认值为nil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"

)



type DefaultI interface {
GetName()
}

func main(){

var mk DefaultI
fmt.Println(mk) //接口的默认值为nil

}