1. 程式人生 > 其它 >golang的深淺拷貝結構體物件

golang的深淺拷貝結構體物件

golang的深淺拷貝結構體物件

問題描述

當我們以 new 或 & 的形式,創立一個 struct 的物件例項後,如果間接應用賦值運算子,則像其餘語言一樣,會淺拷貝到一個新物件,二者指向的記憶體地址是相同的。   值型別的資料,預設都是深拷貝 int float string bool array struct   引用型別的資料,預設都是淺拷貝 slice map function   結構體深拷貝 結構體中都是值型別的欄位 :=賦值就是深拷貝    
package main

import (
   "fmt"
)

type Student struct {
   Name string
   Age  uint8
}

func main() {
   // 深拷貝 將 stud1 物件 深拷貝出一個 stud2
   // stud1 和 stud2 指向了兩塊記憶體地址 正本
   stud1 := &Student{Name: "stud1", Age: 35}
   // 為 tmp 調配新的記憶體地址
   tmp := *stud1
   // 將 tmp 的記憶體地址賦給指標變數 stud2
   stud2 := &tmp
   stud2.Name = "stud2"
   fmt.Printf("%+v\n%+v\n", stud1, stud2)

   // 淺拷貝
   stud3 := &Student{Name: "stud3", Age: 35}
   stud4 := stud3
   stud4.Name = "stud4"
   fmt.Printf("%+v\n%+v\n", stud3, stud4)
}