golang中结构体当做函数参数或函数返回值都会被拷贝

1. 结构体做函数的参数或返回值时,都会被重新拷贝一份如果不想拷贝,可以传递结构体指针

package main

import "fmt"

type Person struct {
	name string
	age int
}

var p = Person{"武沛齐", 18}

func doSomething() Person {
	// 结构体做函数的参数或返回值时,都会被重新拷贝一份,如果不想拷贝,可以传递结构体指针
	return p
}

func main() {
	p1 := doSomething()
	p1.name = "马亚南"
	fmt.Println(p1)
	fmt.Println(p)
}

  输出:{马亚南 18}     {武沛齐 18}

2. 如果不想拷贝,可以传递结构体指针

package main

import "fmt"

type Person struct {
	name string
	age int
}

var p = Person{"武沛齐", 18}

func doSomething() *Person {
	// 结构体做函数的参数或返回值时,都会被重新拷贝一份,如果不想拷贝,可以传递结构体指针
	return &p
}

func main() {
	p1 := doSomething()
	p.name = "马亚南"
	fmt.Println(p1)
	fmt.Println(p)
}

  输出:&{马亚南 18}  {马亚南 18}

 

 

posted @ 2021-10-16 11:09  专职  阅读(716)  评论(0编辑  收藏  举报