Golang được phát triển từ C nên nó có khái niệm pointer. Nếu bạn chưa biết Pointer là gì thì hãy xem video này nhé: https://www.youtube.com/watch?v=zuegQmMdy8M.
Dưới đây là đoạn code sai khi của tôi khi cố gắng clone một slide:
a := []string{"a", "b", "c"} b := a b[0] = "x" fmt.Println(a) // [x b c] fmt.Println(b) // [x b c]
b := a
ở trên thực chất là set giá trị cho b
cùng trỏ đến một vùng nhớ với a
nên khi thay đổi phần tử của b
thì a
cũng thay đổi theo. Vì vậy khi muốn clone một slide ta phải làm như sau:
a := []string{"a", "b", "c"} b := append([]string{}, a...) b[0] = "x" fmt.Println(a) // [a b c] fmt.Println(b) // [x b c]