【Go】隐式实现接口

接口的隐式实现

类型通过实现一个接口的所有方法来实现接口

1
2
3
4
5
6
7
8
9
10
11
12
13
// 定义接口类型 MyInterface,
type MyInterface interface {
f()
}

type T struct {
s string
}

// 类型T实现了接口 Myinterface
func (t T) M() {
// do something
}

类型T实现了接口

接口也是一种值

接口代码实现

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
32
33
34
package main

import (
"fmt"
)

// 定义接口类型
type I interface {
M()
}

// 定义结构体类型T
type T struct {
S string
}

// 类型T实现了接口 I
func (t *T) M() {
fmt.Println(t.S)
}

// 函数,参数为接口 I
func describe(i I) {
fmt.Printf("(%v, %T)\n", i, i)
}

func main() {
// 声明一个I接口类型的变量 i
var i I

i = &T{"Hello"}
describe(i)
i.M()
}

保存为 helloworld.go, 执行结果

1
2
3
[me@VM_0_14_centos go]# go run helloworld.go 
(&{Hello}, *main.T)
Hello

在go内部里,接口值可以看作是包含值和具体类型的元组: (value, type)

这里第31行初始化的变量 i 是接口类型

它的value是指向 {Hello} 的指针
它的type是指向T类型的指针 *main.T

坚持原创技术分享,谢谢鼓励我继续创作!