【Golang】继承指针与非指针的一个疑问

Golang类型中嵌入一个类型,和指向这个类型的指针有什么区别呢?

代码说明:

import (
    "fmt"
)

type Animal struct {
    Name string
}
type Persion struct {
    Animal
}
type Ppersion struct {
    *Animal
}

func main() {
    animal := Animal{Name: "Cat"}
    persion := Persion{animal}
    ppersion := Ppersion{&animal}
    fmt.Println("Animal:" + animal.Name)
    fmt.Println("Persion:" + persion.Name)
    fmt.Println("PPersion:" + ppersion.Name)

    animal.Name = "Dog"
    fmt.Println("------------我是卖萌分割线------------")
    fmt.Println("Animal:" + animal.Name)
    fmt.Println("Persion:" + persion.Name)
    fmt.Println(persion.Animal == animal)
    fmt.Println("PPersion:" + ppersion.Name)
    fmt.Println(ppersion.Animal == &animal)
}

你可以看到如下输出:

Animal:Cat
Persion:Cat
PPersion:Cat
------------我是卖萌分割线------------
Animal:Dog
Persion:Cat
false
PPersion:Dog
true

传值和传引用,显而易见,非指针匿名字段是原结构体的一个拷贝,不影响原结构体。

这会带来很多问题,所有平时见到的,指针匿名字段多一些,当然有些场景下确实需要值传递。

发布了338 篇原创文章 · 获赞 14 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/105292468