如何在 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 中,您可以透過值或使用指標引用來複制結構體。當您透過值複製結構體時,會在記憶體中建立一個新的結構體副本,並將原始結構體的所有欄位複製到新結構體中。另一方面,當您使用指標引用複製結構體時,原始結構體和複製的結構體共享相同的記憶體地址。您應該根據您的使用場景選擇合適的方法。

更新於: 2023年5月5日

6K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告