Lesson 10 — Vòng lặp for · Visualization
Ba module tương tác để hiểu vòng lặp Go: (1) animate từng iteration trên slice tự nhập, (2) so sánh range vs C-style trên UTF-8 string, (3) labeled break trong matrix 2D.
1. Loop Visualizer — chạy từng vòng
Nhập slice và chọn pattern. Bấm ▶ Step để chạy từng vòng, ▶▶ Play để auto, ↺ Reset để bắt đầu lại.
Bấm ▶ Step để bắt đầu.
2. range vs C-style trên UTF-8
So sánh hai cách duyệt cùng một string. C-style for i := 0; i < len(s); i++ đọc byte (sai cho Unicode). range đọc rune đúng codepoint.
Bytes (mỗi cell = 1 byte trong slice gốc):
Runes (mỗi cell = 1 codepoint Unicode):
C-style — đọc byte
for i := 0; i < len(s); i++ { fmt.Printf("%d → byte %d\n", i, s[i]) }
range — đọc rune
for i, r := range s { fmt.Printf("%d → rune %c U+%04X\n", i, r, r) }
3. Labeled break — tìm target trong matrix 4×4
Chọn target. Animate scan từng cell theo thứ tự (i, j). Khi gặp target, break outer thoát cả hai loop — các cell còn lại không được duyệt.
// Khi tìm thấy → break outer thoát CẢ HAI loop outer: for i := range matrix { for j := range matrix[i] { if matrix[i][j] == target { foundRow, foundCol = i, j break outer } } }
Bấm ▶ Chạy scan.
Tóm tắt
- Module 1: Mọi loop pattern (sum/max/filter/transform/count) đều dùng cùng cú pháp
for _, v := range s— chỉ khác accumulator state. - Module 2: C-style
s[i]trả byte,range strả rune. Trên ASCII thuần (chỉ a-z, 0-9...) hai cách giống nhau; trên Unicode (Vietnamese, accented chars, emoji) chỉrangeđúng. - Module 3:
breakthường chỉ thoát loop trong cùng.break outerthoát thẳng loop được gắn nhãnouter:.