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 如何在不強制執行的情況下實現多態性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!