MST

星途 面试题库

面试题:Go语言接口多态性在复杂数据结构中的应用

给定一个`[]interface{}`类型的切片,其中可能包含实现了`Area`接口(`Area`接口只有一个`GetArea`方法用于计算面积)的不同形状结构体(如`Rectangle`、`Circle`等)。请编写一个函数,该函数接收这个切片,利用接口的多态性计算并返回切片中所有形状的总面积。请详细说明实现思路及关键步骤。
49.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义 Area 接口,包含 GetArea 方法。
  2. 定义不同形状的结构体,如 RectangleCircle,并为它们实现 Area 接口的 GetArea 方法。
  3. 编写接收 []interface{} 切片的函数,遍历切片,通过类型断言判断每个元素是否实现了 Area 接口,如果实现了,则调用 GetArea 方法并累加面积。

关键步骤

  1. 定义接口
type Area interface {
    GetArea() float64
}
  1. 定义形状结构体及实现接口
type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) GetArea() float64 {
    return r.Width * r.Height
}

type Circle struct {
    Radius float64
}

func (c Circle) GetArea() float64 {
    return 3.14 * c.Radius * c.Radius
}
  1. 编写计算总面积的函数
func CalculateTotalArea(shapes []interface{}) float64 {
    totalArea := 0.0
    for _, shape := range shapes {
        if areaShape, ok := shape.(Area); ok {
            totalArea += areaShape.GetArea()
        }
    }
    return totalArea
}

示例使用

func main() {
    shapes := []interface{}{
        Rectangle{Width: 5, Height: 10},
        Circle{Radius: 3},
    }
    total := CalculateTotalArea(shapes)
    println(total)
}

以上代码通过定义接口、形状结构体实现接口,以及利用类型断言和接口多态性来计算切片中所有形状的总面积。