package main
import (
"fmt"
)
type Animal struct {
Age int
}
type Person struct {
Animal
Sex int
}
func main() {
animal := Animal{20}
var person = Person{animal, 1}
fmt.Println(person.Age)
fmt.Println(person.Sex)
animal.Age = 10
fmt.Println(person.Age)
fmt.Println(person.Sex)
fmt.Println(person.Animal.Age)
fmt.Println(animal.Age)
}
结果
root@ima-ThinkPad-W540:~/go/src/main# go run main.go
20
1
20
1
20
10
可以看到 animal 作为 person 的子项,是复制过去的,而不是指向,因此当animal.Age = 10
重新赋值,
person.Animal.Age
并没有改变
因此,在一些使用一些数据库库包的时候,这个部分的使用要谨慎,如果要做联动,就需要通过指针的方式,代码如下:
package main
import (
"fmt"
)
type Animal struct {
Age int
}
type Person struct {
*Animal
Sex int
}
func main() {
animal := Animal{20}
var person = Person{&animal, 1}
fmt.Println(person.Age)
fmt.Println(person.Sex)
animal.Age = 10
fmt.Println(person.Age)
fmt.Println(person.Sex)
fmt.Println(person.Animal.Age)
fmt.Println(animal.Age)
}
结果输出:
root@ima-ThinkPad-W540:~/go/src/main# go run main.go
20
1
10
1
10
10
可以看到结果修改了