🌿 Overview
- Trong Golang, độ dài của một array sẽ được coi là một phần của kiểu dữ liệu, vậy nên không thể thay đổi được.
arr := [3]int{1,2,3} // arr có kiểu dữ liệu là [3]int-
Vì vậy, Golang cung cấp một thằng khác để giúp chúng ta sử dụng mảng thuận tiện hơn, đó là
slice. -
Syntax khởi tạo giống với 1 array, nhưng không cần truyền độ dài, độ dài của
slicesẽ bằng với số lượng phần tử khởi tạo.
slice := []int{1,2,3,4,5}- Có thể khởi tạo một
slicenil
slice := []int{}🌿 Slice mechanism

- 🌱 Khởi tạo một
slice, Go đồng thời sẽ tạo mộtarrayvà trỏ con trỏ tớiarrayđó. slicecó 2 chỉ số cần quan tâm:length: số lượng của các phần tử tồn tại trongslicecapacity: khả năng mở rộng củaslice
// có thể khởi tạo 1 slice bằng func make
// 5 => capacity
// 3 => length
// length <= capacity, unless => error
slice := make([]int, 3, 5)
// length là số lượng ô nhớ có thể sử dụng luôn
slice[0] = 1
slice[1] = 10
slice[2] = 20
slice[3] = 30 // => panic: runtime error: index out of range [3] with length 3- 2 ô nhớ còn lại đã được khởi tạo trước đó nhưng không sử dụng trực tiếp như ở trên được mà phải
append
slice = append(slice, 30)
slice = append(slice, 40)
- Khi hết thêm hết
capacity, từ đây, mỗi khiappendGo sẽ tạo mộtarraymới vớicapacity + 1vàlength + 1, copy các giá trị cũ vàappendthêm giá trị mới.
slice = append(slice, 50)
Lưu ý
Cần để ý capacity của 1 slice, tránh việc slice không đủ capacity, mỗi lần thêm một phần tử mới sẽ ảnh hưởng đến performance của hệ thống.