MST

星途 面试题库

面试题:Go语言中接口版本控制策略之接口扩展

在Go语言中,假设你有一个现有接口`Animal`,包含`Speak`方法。现在需要对这个接口进行版本升级,添加一个`Run`方法,同时要保证原有的实现类(如`Dog`结构体实现了`Animal`接口)无需修改代码就能继续使用。请描述你会采取什么样的策略,并给出简单示例代码。
32.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 策略描述
    • 不直接修改原有的Animal接口,而是创建一个新的接口,该新接口嵌入原有的Animal接口,并添加新的Run方法。这样,原有的实现类(如Dog结构体)因为已经实现了Animal接口,对于新接口,只要它再实现Run方法,就可以满足新接口的要求,而在使用原功能时,仍然可以使用原Animal接口,无需修改原实现类代码。
  2. 示例代码
package main

import "fmt"

// 原有的Animal接口
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)
}

// 新的接口,嵌入原Animal接口并添加Run方法
type AdvancedAnimal interface {
    Animal
    Run() string
}

// Dog结构体实现AdvancedAnimal接口的Run方法
func (d Dog) Run() string {
    return fmt.Sprintf("%s is running", d.Name)
}

func main() {
    dog := Dog{Name: "Buddy"}
    // 使用原Animal接口
    var a Animal = dog
    fmt.Println(a.Speak())

    // 使用新的AdvancedAnimal接口
    var aa AdvancedAnimal = dog
    fmt.Println(aa.Speak())
    fmt.Println(aa.Run())
}