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

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

在Go中,您可以使用值或指针引用来复制结构。当您使用值复制结构时,会在内存中创建一个新的结构副本,并将原始结构的所有字段复制到新结构中。另一方面,当您使用指针引用复制结构时,原始结构和复制的结构共享同一内存地址。

本文将讨论如何使用值和指针引用在Go中复制结构类型。

使用值引用复制结构

要使用值引用复制结构,您只需将一个结构的值分配给另一个结构即可。

示例

考虑以下示例 –

package main

import "fmt"

type Person struct {
   name string
   age  int
}

func main() {
   // 创建一个新的人
   p1 := Person{name: "John", age: 30}

   // 通过值复制人
   p2 := p1

   // 更改p2的年龄
   p2.age = 35

   // 打印两个人的值
   fmt.Println(p1) // 输出:{John 30}
   fmt.Println(p2) // 输出:{John 35}
}

输出

 { John 30 }
 { John 35 }

在上面的示例中,我们创建了一个名为Person的结构类型,其中包含两个字段名和年龄。然后我们使用名称为“约翰”的人和年龄为30创建了一个新的人p1。要将人p1复制到另一个人p2中,我们只需将p1的值赋给p2。然后我们将p2的年龄更改为35,并打印了两个人的值。如您所见,更改p2的年龄并未影响p1的年龄。

使用指针引用复制结构

要使用指针引用复制结构,您需要创建一个新结构,然后将原始结构的内存地址分配给它。

示例

考虑以下示例 –

package main

import "fmt"

type Person struct {
   name string
   age  int
}

func main() {
   // 创建一个新的人
   p1 := &Person{name: "John", age: 30}

   // 通过引用复制人
   p2 := p1

   // 更改p2的年龄
   p2.age = 35

   // 打印两个人的值
   fmt.Println(*p1) // 输出:{John 35}
   fmt.Println(*p2) // 输出:{John 35}
}

输出

 { John 35 }
 { John 35 }

在上面的示例中,我们创建了一个名为Person的结构类型,其中包含两个字段名和年龄。然后我们使用名称为“约翰”的人和年龄为30创建了一个新的人p1。要将人p1复制到另一个人p2中,我们将p1的内存地址分配给p2。然后我们将p2的年龄更改为35,并打印了两个人的值。如您所见,更改p2的年龄会影响p1的年龄,因为原始结构和复制的结构共享同一内存地址。

结论

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程