Go 中的多态性
在面向对象编程中,多态性允许单个接口引用多种类型的对象。 Go 并没有严格执行这个概念,但它提供了实现类似行为的替代方法。
考虑以下代码片段:
type Foo struct { ... } type Bar struct { Foo ... } func getFoo() Foo { return Bar{...} }
正如您所注意到的,在 Go 中,此代码引发了错误表明 getFoo() 必须返回 Foo 的实例。要实现多态行为,您可以利用 Go 中的接口和组合:
package main import "fmt" type Foo interface { printFoo() } type FooImpl struct { } type Bar struct { FooImpl } type Bar2 struct { FooImpl } func (f FooImpl)printFoo(){ fmt.Println("Print Foo Impl") } func getFoo() Foo { return Bar{} } func main() { fmt.Println("Hello, playground") b := getFoo() b.printFoo() }
在这个更新的示例中:
这种技术提供了一种利用接口和组合在 Go 中实现多态性的方法,允许单个接口用于不同的具体类型。
以上是Go 如何在不强制执行的情况下实现多态性?的详细内容。更多信息请关注PHP中文网其他相关文章!