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}

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM