在 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: 戀水無意