go语言基础 结构体的 类型和拷贝

本文通过Go语言示例,详细解析了结构体的深拷贝与浅拷贝的区别及应用场景。介绍了值类型与指针类型的拷贝过程,并通过具体代码展示了不同拷贝方式下结构体成员变量的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体的类型:值类型
默认是深拷贝

结构体指针

package main

import "fmt"

type person2 struct {
   name string
   age int
}

func main()  {
   /*
   深拷贝:
      值类型:拷贝数据
   浅拷贝:
      拷贝地址-->指针

   结构体:
      值类型:
         p1 := person{.....}
      浅拷贝:
         指针:
            p2:=new(person)
            p3:= &p1
    */
    p1 := person2{"王二狗",30}
    fmt.Printf("%p\n", &p1) //0xc0420023e0
    p2 := p1 //值类型,深拷贝
    fmt.Printf("%p\n",&p2)
    p2.name="王二狗狗"
    fmt.Println(p1)
    fmt.Println(p2)

    //定义一个指针,浅拷贝
    p3:= &p1 // 将p1的地址给p3
    fmt.Printf("%T\n", p3) //*main.person2
   p3.name ="李小花"
   fmt.Println(p1)
   fmt.Println(p3)
   fmt.Println(*p3)

   p4 := new(person2) // 指针
   fmt.Printf("%T\n",p4) //*main.person2
   p4.name="rose"
   p4.age = 30
   fmt.Println(*p4) //
   fmt.Printf("%p,%p\n", &p4, p4) //0xc042062020,0xc04203e4a0
   p6:=p4 //
   p6.name = "jack"
   fmt.Println(p4)
   fmt.Println(p6)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值