1. 程式人生 > 實用技巧 >Go 中 切片的 深賦值 潛賦值,還有二維陣列 在使用的時候 需要申請記憶體

Go 中 切片的 深賦值 潛賦值,還有二維陣列 在使用的時候 需要申請記憶體

// 正常賦值
a := []int{1, 2, 3, 4, 5}
b := a
b[0] = 10
fmt.Println(a) // [10 2 3 4 5]
fmt.Println(b) // [10 2 3 4 5]

// 多維切片賦值
a := [][]int{
{1,2,3,4,5},
{6,7,8,9,10},
}
b := a
b[0][0] = 11
fmt.Println(a) // [[11 2 3 4 5] [6 7 8 9 10]]
fmt.Println(b) // [[11 2 3 4 5] [6 7 8 9 10]]

// 多維切片 copy
a := [][]int{ {1,2,3,4,5}, {
6,7,8,9,10}, } b := make([][]int, len(a)) copy(b, a) b[0][0] = 11 fmt.Println(a) // [[11 2 3 4 5] [6 7 8 9 10]] fmt.Println(b) // [[11 2 3 4 5] [6 7 8 9 10]]

// 單切片 json序列化 神拷貝
a := []int{1, 2, 3, 4, 5} var b []int result, _ := json.Marshal(a) _ = json.Unmarshal(result, &b) b[0] = 10 fmt.Println(a) // [1 2 3 4 5]
fmt.Println(b) // [10 2 3 4 5]

// 多維切片 json 深拷貝
a := [][]int{ {1,2,3,4,5}, {6,7,8,9,10}, } b := make([][]int, len(a)) result, _ := json.Marshal(a) _ = json.Unmarshal(result, &b) b[0][0] = 11 fmt.Println(a) // [[1 2 3 4 5] [6 7 8 9 10]] fmt.Println(b) // [[11 2 3 4 5] [6 7 8 9 10]]

// 多維 切片 自主深拷貝
a := []int
{1, 2, 3, 4, 5} b := make([]int, len(a)) for key, value := range a{ b[key] = value } b[0] = 10 fmt.Println(a) // [1 2 3 4 5] fmt.Println(b) // [10 2 3 4 5]