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()) } }
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。