面试题答案
一键面试package main
import "fmt"
// 定义一个结构体
type MyPrinter struct{}
// 实现Printer接口的Print方法
func (mp MyPrinter) Print(data string) {
fmt.Println(data)
}
在Go语言中,函数签名对于接口实现至关重要。只有当一个类型的方法的函数签名与接口中定义的方法完全匹配时,该类型才被视为实现了此接口。
接口方法的函数签名有以下严格要求:
- 方法名:必须与接口中定义的方法名一致。例如上述代码中
MyPrinter
结构体的Print
方法名与Printer
接口中的Print
方法名一致。 - 参数列表:参数的数量、顺序和类型都必须与接口定义完全相同。如
Print
方法接受一个string
类型的参数,实现时参数也必须是string
类型且数量为1个。 - 返回值列表:返回值的数量、顺序和类型同样要与接口定义严格匹配。若接口方法无返回值,实现的方法也不能有返回值,像上述
Print
方法无返回值,实现时也无返回值。
这种基于函数签名匹配来确定接口实现的机制,使得Go语言的接口实现非常灵活,不需要显式声明实现了哪个接口,只要方法签名匹配即可。