要捕获嵌套的接口值,可以使用类型断言和类型判断来实现。下面是一个示例代码:
package main
import (
"fmt"
)
type Shape interface {
Area() float64
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
shapes := []Shape{
Circle{Radius: 2},
Rectangle{Width: 3, Height: 4},
}
for _, shape := range shapes {
// 使用类型断言判断具体的类型
switch shape.(type) {
case Circle:
circle := shape.(Circle)
fmt.Printf("Circle area: %.2f\n", circle.Area())
case Rectangle:
rectangle := shape.(Rectangle)
fmt.Printf("Rectangle area: %.2f\n", rectangle.Area())
}
}
}
在上面的示例代码中,定义了一个Shape接口和两个实现了Shape接口的结构体Circle和Rectangle。在main函数中,我们创建一个包含两个不同类型的形状的切片。然后,使用for循环遍历切片中的每个形状。在循环中,我们使用类型断言和类型判断来判断具体的形状类型,并根据类型执行相应的操作。
注意,在使用类型断言时,使用shape.(type)
获取类型,并将其与具体的类型进行比较。如果类型匹配,可以使用shape.(Circle)
或shape.(Rectangle)
来获取具体的值。如果类型不匹配,会引发运行时错误。
运行上述代码,输出结果如下:
Circle area: 12.56
Rectangle area: 12.00
以上代码演示了如何捕获嵌套的接口值,并根据具体的类型执行相应的操作。希望对你有帮助!