Golang 如何使用值和指针引用复制结构体类型

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的新人,其名称为”John”,年龄为30岁。要将人p1复制到另一个人p2,我们只需将p1的值赋给p2。然后我们将p2的年龄更改为35岁,并打印两个人的值。正如您所看到的,更改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的新人员,其姓名为”John”,年龄为30。为了将人员p1复制到另一个人员p2,我们将p1的内存地址分配给p2。然后我们将p2的年龄更改为35并打印两个人员的值。正如你所看到的,更改p2的年龄会影响p1的年龄,因为原始结构和复制的结构共享同一个内存地址。

结论

在Go中,你可以通过值或指针引用来复制一个结构。当你通过值复制一个结构时,在内存中创建了结构的新副本,并将原始结构的所有字段复制到新结构中。另一方面,当你使用指针通过引用复制一个结构时,原始结构和复制的结构共享同一个内存地址。你应该根据你的用例选择合适的方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程