Go 结构体如何模拟实现其他语言中的"继承"

发布时间:2023-03-17浏览次数:0

支持注册ChatGPT Plus的OneKey虚拟卡
绑定Apple Pay、Google Pay、支付宝和微信支付进行日常消费

注册和了解更多 ->

silver

对于 Go 语言而言,它的类型系统中没有类,因此没有真正的继承。但可以使用结构体嵌入另一个结构体来达到类似继承的效果。这种方式称为组合。下面是一个示例:

type Animal struct {
    weight float32
    age    int
}

func (a *Animal) Eat() {
    fmt.Println("Animal is eating")
}

type Dog struct {
    Animal
    breed string
}

func main() {
    d := Dog{Animal{10.5, 2}, "Golden Retriever"}
    fmt.Println(d.age)      // 输出 2
    fmt.Println(d.weight)   // 输出 10.5
    fmt.Println(d.breed)    // 输出 "Golden Retriever"
    d.Eat()                 // 输出 "Animal is eating"
}

在这个示例中,结构体 Dog 嵌入了另一个结构体 Animal。因为 Animal 拥有一个 Eat() 方法,所以可以在 Dog 中使用该方法。此外,它还可以访问 Animal 的属性。这是一个简单的例子,但通过组合可实现类似继承的概念。

字节笔记本扫描二维码查看更多内容