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