go的深拷贝跟浅拷贝

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

图片

浅拷贝和深拷贝

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

浅拷贝示例

package main

import (
    "fmt"
)

func main() {
    a := []int{1, 2, 3, 4, 5}

    // 浅拷贝
    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{1, 2, 3, 4, 5}

    // 深拷贝
    b := make([]int, len(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 @ 2024-06-12 12:52  技术颜良  阅读(4)  评论(0编辑  收藏  举报