Golang 如何使用值和指针引用复制结构类型
在Golang中,结构体或 struct 是一种用户定义的数据类型,允许组合不同类型的数据类型并作为记录使用。
在Golang中,结构体变量可以使用 赋值运算符(=) 轻松复制到另一个变量。对第二个结构体做出的任何更改都不会反映回第一个结构体中。
示例1:
// Golang程序演示
//复制一个结构到另一个变量
package main
import (
"fmt"
)
//声明一个结构
type Student struct {
//声明变量
name string
marks int64
stdid int64
}
//主函数
func main() {
//创建Student struct的实例类型
std1 := Student{"Vani", 98, 20024}
//打印学生struct
fmt.Println(std1)
//使用赋值运算符将复制结构
std2 := std1
//打印复制结构
//将与struct std1具有相同的值
fmt.Println(std2)
//复制后更改结构的值std2
std2.name = "Abc"
std2.stdid = 20025
//打印更新的结构
fmt.Println(std2)
}
输出:
{Vani 98 20024}
{Vani 98 20024}
{Abc 98 20025}
在对结构体的指针引用的情况下,原始结构体的底层内存位置和指向结构体的指针的内存位置将是相同的。对第二个结构体做出的任何更改都将在第一个结构体中反映出来。通过使用 ** &运算符**实现对结构体的指针。它在堆上分配,并共享其地址。
示例2:
// Golang程序演示指向结构体的指针的概念
package main
import "fmt"
//声明一个结构
type Person struct {
name string
address string
id int64
}
//主函数
func main() {
//创建Person struct类型的实例
p1 := Person{"Vani", "Delhi", 20024}
//打印学生struct
fmt.Println(p1)
//将struct person引用到另一个变量
//使用&运算符
//这里是指向结构体的指针
p2 := &p1
//打印指向结构体的指针
fmt.Println(p2)
//更改结构p2的值
p2.name = "Abc"
p2.address = "Hyderabad"
//输出更新的结构
fmt.Println(p2)
//结构p1的值也会更改,因为p2的值也被更改了
fmt.Println(p1)
}
输出:
{Vani Delhi 20024}
&{Vani Delhi 20024}
&{Abc Hyderabad 20024}
{Abc Hyderabad 20024}