Go语言接口实现教程

在 中,如果一个 T 实现了一个 中的所有 ,那么我们就可以说类型 T 实现了接口。

Go 语言中,接口的实现是隐式的,两个类型之间的实现关系不需要在代码中显式的表示出来,只要任意类型实现了接口的所有方法,那么就实现了该接口。

Go 语言实现接口必须,实现接口中所有的方法,同时,函数的函数名、 和 必须完全一样。

Go语言接口实现

语法

type InterfaceName interface{ func1 (param1) return1 func2 (param2) return2 } type (t T) func1 (param1) return1{ } type (t T) func2 (param2) return2{ }

说明

首先,我们定义了一个接口 InterfaceName,该接口有两个方法,分别为 func1 和 func2。接着,我们为类型 T 定义了两个方法,func1 和 func2。

因为,T 的方法 func1 和 func2 的方法签名和接口 InterfaceName 中的一模一样,并且 T 实现了 InterfaceName 中所有的方法。

因此,我们就说 T 实现了接口 InterfaceName。

案例

Golang接口实现

定义一个 Golang 接口,并实现

package main import ( "fmt" ) // 定义一个 Golang 接口,并实现 type Personer interface { Eat() Sleep(duration int) } type Student struct { Name string Age int Score float32 } func (stu Student)Eat(){ fmt.Println("Call stu eat") } func (stu Student)Sleep(duration int){ fmt.Println("Sleep duration =", duration, "hours") } func main() { fmt.Println("嗨客网(www.haicoder.net)") var person Personer var stu Student person = stu person.Eat() person.Sleep(8) }

程序运行后,控制台输出如下:

02_golang接口实现.png

我们定义了一个 Personer 接口,该接口有两个方法,一个是 Eat、另一个是 Sleep。其中,方法 Eat 没有任何参数和返回值,方法 Sleep 接受一个 类型的参数。

接着,我们定义了一个 Student 结构体,同时,为该结构体添加了两个方法,两个方法的签名跟接口里面的一模一样,因此结构体 Student 实现了接口 Personer。

最后,在 函数中,我们定义了两个 person 和 stu,并且将变量 stu 赋值给了变量 person。因为结构体 Student 实现了接口 Personer ,因此可以将变量 stu 赋值给变量 person。

Golang接口实现

定义一个 Golang 接口,并实现

package main import ( "fmt" ) // 定义一个 Golang 接口,并实现 type Personer interface { Eat() Sleep(duration int) } type Student struct { Name string Age int Score float32 } func (stu Student)Eat(){ fmt.Println("Call stu eat") } func (stu Student)Sleep(duration int){ fmt.Println("Sleep duration =", duration, "hours") } func (stu Student)Study(score float32){ fmt.Println("Got", score, "mark") } func main() { fmt.Println("嗨客网(www.haicoder.net)") var stu Student stu.Eat() stu.Sleep(8) stu.Study(80) }

程序运行后,控制台输出如下:

03_golang接口实现.png

我们定义了一个 Personer 接口,该接口有两个方法,一个是 Eat、另一个是 Sleep。同时,定义了一个 Student 结构体,为该结构体添加了三个方法,其中两个方法的签名跟接口里面的一模一样,因此结构体 Student 实现了接口 Personer。

最后,在 main 函数中,调用结构体 Student 中的三个方法。结构体 Student 的方法比接口 Personer 的方法多,但实现了接口 Personer 的所有方法,因此 Student 也实现了接口 Personer。

Golang接口实现总结

Go 语言中,接口的实现是隐式的,两个类型之间的实现关系不需要在代码中显式的表示出来,只要任意类型实现了接口的所有方法,那么就实现了该接口。