golang,关于struct 成员变量赋值和之前的关系

Golang · Fecmall · 于 5年前 发布 · 3337 次阅读
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


可以看到结果修改了

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics