go的深拷贝跟浅拷贝

Golang面试官:聊一聊浅拷贝和深拷贝

图片

浅拷贝和深拷贝

  • 浅拷贝后的对象和源对象是同一个对象,值被修改,原值的数据也会被修改
  • 深拷贝后的对象,是一个全新的对象,和源对象没有关系,修改值不会相互影响

浅拷贝示例

package main

import (
    "fmt"
)

func main() {
    a := []int{12345}

    // 浅拷贝
    b := a

    // 修改 b 的第一个元素
    b[0] = 100

    // 发现 a 的第一个元素也被修改了
    fmt.Println(a) // [100 2 3 4 5]
    fmt.Println(b) // [100 2 3 4 5]
}

深拷贝示例,使用内建函数copy实现

package main

import (
    "fmt"
)

func main() {
    a := []int{12345}

    // 深拷贝
    b := make([]intlen(a))

    copy(b, a)

    // 修改 b 的第一个元素
    b[0] = 100

    // 可以看到 a 的值并没有被修改
    fmt.Println(a) // [1 2 3 4 5]
    fmt.Println(b) // [100 2 3 4 5]
}

公众号回复:

golang加群】加入golang开发者交流群

golang资料】获取golang面试刷题资料

golang · 目录
上一篇面试官:Golang语言中的panic和recover有什么作用?下一篇Golang:bytes 格式和解析数字字节值(10K、2M、3G等)
阅读 272
 
 
 
 
 
 
 
 
 
 
posted @   技术颜良  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2023-06-12 ELK分析Nginx日志和可视化展示
2023-06-12 SRE传道,如何解决系统报错:nf_conntrack: table full, dropping packets
2023-06-12 MySQL闪回工具简介 及 binlog2sql工具用法
2023-06-12 MySQL8.0轻松搞定GTID主从复制
2023-06-12 MySql5.7主从同步配置(gtid模式)
2023-06-12 Golang 应用脚手架
2021-06-12 【MySQL】通过Percona Monitoring and Management实现数据库的监控
点击右上角即可分享
微信分享提示