面试题答案
一键面试- 方法一:直接实现新方法
在
Dog
结构体对应的代码中,直接添加对新Run
方法的实现。
type Dog struct {
// 结构体字段
}
func (d Dog) Speak() {
// 原有 Speak 方法实现
}
func (d Dog) Run() {
// Run 方法的具体实现,例如:
println("Dog is running")
}
这样,Dog
结构体就既满足了旧接口的 Speak
方法,也满足了新接口的 Run
方法,并且原有调用 Speak
方法的代码不会受到破坏。
- 方法二:使用组合(如果适用场景允许)
可以创建一个新的结构体,通过组合旧的实现
Animal
接口的结构体,并实现新方法。
type Dog struct {
// 结构体字段
}
func (d Dog) Speak() {
// 原有 Speak 方法实现
}
// 新的包装结构体
type NewDog struct {
Dog
}
func (nd NewDog) Run() {
// Run 方法的具体实现,例如:
println("NewDog is running")
}
在使用时,使用 NewDog
类型的实例,它既可以调用 Dog
结构体的 Speak
方法(通过组合继承),又实现了新的 Run
方法。但要注意,这种方式在一些场景下可能需要调整原有代码对 Dog
类型实例的使用,改为使用 NewDog
类型实例。