面试题答案
一键面试在Go语言中,接口(interface)是一种抽象类型,通过定义一组方法签名来实现多态性。只要某个类型实现了接口中定义的所有方法,那么这个类型就实现了该接口。不同的结构体类型可以实现同一个接口,从而实现多态。
以下是一个简单示例代码:
package main
import "fmt"
// 定义一个接口
type Animal interface {
Speak() string
}
// 定义Dog结构体并实现Animal接口
type Dog struct {
Name string
}
func (d Dog) Speak() string {
return fmt.Sprintf("Woof! My name is %s", d.Name)
}
// 定义Cat结构体并实现Animal接口
type Cat struct {
Name string
}
func (c Cat) Speak() string {
return fmt.Sprintf("Meow! My name is %s", c.Name)
}
// 定义一个函数,接受一个Animal接口类型的参数
func MakeSound(a Animal) {
fmt.Println(a.Speak())
}
你可以使用以下方式调用:
func main() {
dog := Dog{Name: "Buddy"}
cat := Cat{Name: "Whiskers"}
MakeSound(dog)
MakeSound(cat)
}
在上述代码中:
- 定义了
Animal
接口,包含Speak
方法。 Dog
和Cat
结构体分别实现了Animal
接口的Speak
方法。MakeSound
函数接受一个Animal
接口类型的参数,在函数中调用Speak
方法。- 在
main
函数中,创建了Dog
和Cat
的实例,并传递给MakeSound
函数,展示了多态性。当不同的结构体(Dog
和Cat
)实现同一个接口(Animal
)时,可以在运行时根据实际的结构体类型来调用相应的Speak
方法。