range là cú pháp duy nhất để iterate qua collection trong Go, hoạt động khác nhau theo từng kiểu dữ liệu:
- Slice / array:
for i, v := range slice { }— trả về index và value. - Map:
for k, v := range m { }— trả về key và value, thứ tự không xác định. - String:
for i, r := range "hello" { }— trả về byte index và rune (Unicode code point). - Channel:
for v := range ch { }— đọc đến khi channel close. - Integer (Go 1.22+):
for i := range 10 { }— range over integer, tương đươngfor i := 0; i < 10; i++. - Bỏ qua giá trị: dùng blank identifier —
for _, v := range items { }.
Pitfall: range copy value sang biến loop, không phải reference. Nếu cần mutate phần tử, dùng slice[i] thay vì v.