在 Go 語言中,我們不使用子類型或繼承的概念,而是通過組合和接口來實現類似的功能。要實現類似繼承的效果,你可以使用嵌入結構體(embedding struct)和組合(composition)。
通過在一個結構體中嵌入另一個結構體,你可以訪問嵌入結構體的字段和方法。這可以看作是一種簡單的繼承方式,因為嵌入的結構體可以被視為父結構體的一部分。
package main
import "fmt"
type Animal struct {
Name string
}
func (a *Animal) Speak() {
fmt.Println("The animal makes a sound")
}
type Dog struct {
Animal // 嵌入 Animal 結構體
Breed string
}
func main() {
myDog := &Dog{
Animal: Animal{Name: "Buddy"},
Breed: "Golden Retriever",
}
fmt.Println(myDog.Name) // 輸出:Buddy
myDog.Speak() // 輸出:The animal makes a sound
}
組合是指在一個結構體中包含另一個結構體的實例。這種方式可以讓你在組合結構體中使用另一個結構體的功能,同時保持代碼的模塊化和可重用性。
package main
import "fmt"
type Engine struct{}
func (e *Engine) Start() {
fmt.Println("Engine starts")
}
type Car struct {
Engine *Engine // 包含一個 Engine 結構體實例
}
func main() {
myCar := &Car{
Engine: &Engine{},
}
myCar.Start() // 輸出:Engine starts
}
通過這兩種方式,你可以在 Go 語言中實現類似繼承的功能。