如何在 Golang 中使用值和指標引用複製結構體型別?
在 Go 中,您可以透過值或使用指標引用來複制結構體。當您透過值複製結構體時,會在記憶體中建立一個新的結構體副本,並將原始結構體的所有欄位複製到新結構體中。另一方面,當您使用指標引用複製結構體時,原始結構體和複製的結構體共享相同的記憶體地址。
在本文中,我們將討論如何在 Go 中使用值和指標引用複製結構體型別。
使用值引用複製結構體
要使用值引用複製結構體,您只需將一個結構體的值賦值給另一個結構體。
示例
讓我們考慮以下示例:
package main import "fmt" type Person struct { name string age int } func main() { // Create a new person p1 := Person{name: "John", age: 30} // Copy the person by value p2 := p1 // Change the age of p2 p2.age = 35 // Print the values of both persons fmt.Println(p1) // Output: {John 30} fmt.Println(p2) // Output: {John 35} }
輸出
{John 30} {John 35}
在上面的示例中,我們建立了一個名為 Person 的結構體型別,它有兩個欄位 name 和 age。然後,我們建立了一個名為 p1 的新 Person,其姓名為“John”,年齡為 30。要將 Person p1 複製到另一個 Person p2,我們只需將 p1 的值賦值給 p2。然後,我們將 p2 的年齡更改為 35 並列印兩個 Person 的值。正如您所看到的,更改 p2 的年齡不會影響 p1 的年齡。
使用指標引用複製結構體
要使用指標引用複製結構體,您需要建立一個新的結構體,然後將原始結構體的記憶體地址賦值給它。
示例
讓我們考慮以下示例:
package main import "fmt" type Person struct { name string age int } func main() { // Create a new person p1 := &Person{name: "John", age: 30} // Copy the person by reference p2 := p1 // Change the age of p2 p2.age = 35 // Print the values of both persons fmt.Println(*p1) // Output: {John 35} fmt.Println(*p2) // Output: {John 35} }
輸出
{John 35} {John 35}
在上面的示例中,我們建立了一個名為 Person 的結構體型別,它有兩個欄位 name 和 age。然後,我們使用指標引用建立了一個名為 p1 的新 Person,其姓名為“John”,年齡為 30。要將 Person p1 複製到另一個 Person p2,我們將 p1 的記憶體地址賦值給 p2。然後,我們將 p2 的年齡更改為 35 並列印兩個 Person 的值。正如您所看到的,更改 p2 的年齡會影響 p1 的年齡,因為原始結構體和複製的結構體共享相同的記憶體地址。
結論
在 Go 中,您可以透過值或使用指標引用來複制結構體。當您透過值複製結構體時,會在記憶體中建立一個新的結構體副本,並將原始結構體的所有欄位複製到新結構體中。另一方面,當您使用指標引用複製結構體時,原始結構體和複製的結構體共享相同的記憶體地址。您應該根據您的使用場景選擇合適的方法。