Lesson 12 — Array & Slice

Slice anatomy · Sharing pitfall · Tricks playground

Module 1 — Slice anatomy & append growth

Slice là struct 3 field (ptr/len/cap) trỏ vào một underlying array. Click append để thêm phần tử và xem khi nào Go phải re-allocate.

Quy ước màu:
trong len (truy cập được)
trong cap nhưng > len (slot dự phòng)
vừa append/grow
Slice header:
Datanil
Len0
Cap0
Underlying array:
// click "append" để bắt đầu

Module 2 — Slice sharing pitfall

Khi t := s[a:b], hai slice cùng trỏ về một array. Sửa t[i] = sửa s[a+i]. Append vào t có thể ghi đè vùng của s.

Underlying array:
Bắt đầu với s := []int{1, 2, 3, 4, 5}. Tạo t để xem chia sẻ.
// click một button để bắt đầu

Module 3 — Slice tricks playground

Chọn operation, nhập slice và tham số, ấn Run để xem step-by-step.