Go 如何實現多型

落雷發表於2023-10-26

在 Go 語言中,雖然沒有經典的物件導向程式設計中的繼承和多型的概念,但你可以透過介面(interface)來實現多型性。Go 語言鼓勵組合和介面多型,這使得程式碼更加靈活和模組化。下面將詳細介紹 Go 語言中如何實現多型。

多型性是物件導向程式設計的一個核心概念,它允許不同型別的物件在一致的介面下執行不同的操作。在 Go 中,多型性通常是透過介面來實現的。

1. 定義介面

首先,你需要定義一個介面,該介面定義了一組方法,這些方法將被不同型別的物件實現。介面通常用於描述物件的行為。

type Shape interface {
    Area() float64
}

上面的 Shape 介面定義了一個名為 Area 的方法,該方法返回一個浮點數。任何實現了 Shape 介面的型別都必須提供 Area 方法的具體實現。

2. 建立不同型別的結構體

接下來,你可以建立不同型別的結構體,這些結構體將實現 Shape 介面。每個結構體都需要提供 Area 方法的具體實現。

type Rectangle struct {
    Width  float64
    Height float64
}

type Circle struct {
    Radius float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (c Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

上述程式碼定義了兩種形狀,矩形和圓形,併為它們分別實現了 Area 方法。

3. 使用多型

現在,你可以建立不同型別的物件,並使用它們透過介面進行多型呼叫。

func main() {
    r := Rectangle{Width: 4, Height: 5}
    c := Circle{Radius: 3}

    shapes := []Shape{r, c}

    for _, shape := range shapes {
        fmt.Printf("Area: %f\n", shape.Area())
    }
}

在上面的 main 函式中,我們建立了一個 shapes 切片,該切片包含了不同型別的形狀物件(矩形和圓形)。然後,我們遍歷 shapes 切片,並透過介面 Shape 呼叫 Area 方法。由於這兩種形狀都實現了 Shape 介面,因此多型性使我們能夠以一致的方式呼叫它們的 Area 方法。


孟斯特

宣告:本作品採用署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0)進行許可,使用時請註明出處。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 戀水無意


相關文章