如何在 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+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.