Golang复制结构体

aside section ._1OhGeD · · 2958 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang中复制结构体,可以使用赋值语句

package main

import (
    "fmt"
)

type Dog struct {
    age  int
    name string
}

func main() {
    roger := Dog{5, "Roger"}
    mydog := roger
    fmt.Printf("roger addr %p\n", &roger)
    fmt.Printf("mydog addr %p\n", &mydog)
    fmt.Println("Roger and mydog are equal structs?", roger == mydog)
    mydog.name = "piggie"
    fmt.Println("Roger and mydog are equal structs?", roger == mydog)
}

执行结果

roger addr 0xc000092000
mydog addr 0xc000092020
Roger and mydog are equal structs? true
Roger and mydog are equal structs? false

可以看出,roger跟mydog在内存中的地址不同。并且对mydog修改属性,对roger没有影响。
但是注意,这里的Dog结构体中的属性,都是值类型。如果是引用类型的话,复制的是指针,而不是具体的值。所以通过赋值语句对结构体的拷贝,是浅拷贝。如需对引用类型属性进行深拷贝,可以通过手动创建的方式,或者使用实现了deepcopy功能的第三方包


有疑问加站长微信联系

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:Golang复制结构体

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:812540095

2958 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传