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
传值和传引用,显而易见,非指针匿名字段是原结构体的一个拷贝,不影响原结构体。
这会带来很多问题,所有平时见到的,指针匿名字段多一些,当然有些场景下确实需要值传递。