golang的深淺拷貝結構體物件
阿新 • • 發佈:2022-04-20
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) }