go的深複製跟淺複製

技术颜良發表於2024-06-12

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

相關文章