Go 中实现多态
如何实现?
Go 中没有传统意义上的多态,但可以使用接口和反射机制来实现类似于多态的行为。
接口:
- 接口是一个明确定义的方法集,而不管实现它的类型是什么。
 - 当一个类型实现了一个接口,它必须提供接口中定义的所有方法。
 - 接口可以用来表示对象的一组通用行为,而不管其底层实现。
 
反射:
- 反射机制允许程序在运行时检查和修改类型和值。
 - 可以使用反射来动态调用方法和访问类型信息。
 
实现步骤:
- 创建一个定义了共同方法的接口。
 - 创建多个类型,每个类型都实现该接口。
 - 使用反射来动态调用这些方法,而无需了解具体的类型。
 
示例:
<code class="go">type Shape interface {
    Area() float64
}
type Square struct {
    side float64
}
func (s *Square) Area() float64 {
    return s.side * s.side
}
type Circle struct {
    radius float64
}
func (c *Circle) Area() float64 {
    return math.Pi * c.radius * c.radius
}
func main() {
    shapes := []Shape{
        &Square{side: 5},
        &Circle{radius: 5},
    }
    for _, s := range shapes {
        fmt.Println("Area:", reflect.ValueOf(s).MethodByName("Area").Call([]reflect.Value{})[0].Float())
    }
}


                    
                    
            

