Menu
CoddyTech

Slice là một mảng

Bài học 11 trên 21 trong khóa học Slice và map trong Go của Coddy.

Nếu bạn chưa rõ lát cắt liên quan thế nào đến mảng, mình hãy cùng làm rõ nhé. Trong Go, lát cắt thực chất là một tham chiếu đến mảng, và mảng này được gọi là “mảng nền”. Để hiểu điều này, hãy xem một ví dụ:

Giả sử ta có một lát cắt như sau:

str := []string{"Coddy", "Learn", "Play", "test"}

Bạn nghĩ lát cắt str này lưu trực tiếp bốn phần tử đó không? Câu trả lời là không, vì bản thân lát cắt không trực tiếp lưu bất kỳ phần tử nào.

Điều xảy ra phía sau khi ta tạo một lát cắt như vậy là Go tạo một mảng trong bộ nhớ, sau đó trả về một giá trị lát cắt trỏ đến mảng này. Mảng này được gọi là mảng nền của lát cắt. Vì vậy, các phần tử thực sự được lưu trong mảng nền, chứ không phải trong lát cắt.

Mảng nền này có thể được nhiều lát cắt khác cùng chia sẻ. Ví dụ:

str := []string{"Coddy", "Learn", "Play", "test"}
slice1 := str[0:3]
slice2 := str[1:4]

Trong ví dụ này, slice1 và slice2 cùng chia sẻ một mảng nền. Ta có thể thấy thao tác cắt lát không tạo ra một mảng nền mới; thay vào đó, nó tạo ra một lát cắt tham chiếu đến một phần của cùng mảng nền đó.

Vì vậy, trong ví dụ này, tất cả các lát cắt cùng chia sẻ một mảng nền. Ta có thể biểu diễn điều này như sau:

Mỗi khi ta thay đổi lát cắt ban đầu, các lát cắt khác cũng phản ánh những thay đổi này vì chúng cùng tham chiếu đến một mảng nền. Ví dụ, nếu ta đổi "Learn" thành "Fun", kết quả sẽ như sau:

Vì vậy, bạn cần biết rằng một biểu thức tạo lát cắt (name := []string{}) luôn tạo ra một mảng nền ở bên dưới.

Tự làm thử

Bài học này không có thử thách code.

Tất cả bài học trong Slice và map trong Go

Tự luyện tập: Trình biên dịch Go online