← Danh sách bài học Bài 6/20

🔄 Bài 6: Vòng Lặp (Loops)

⏱️ 20 phút | 📚 Dễ

🎯 Mục tiêu:

1. Vòng Lặp For Cơ Bản

Go CHỈ CÓ for, không có while hay do-while.

// Cú pháp: for khởi_tạo; điều_kiện; bước_nhảy { }
for i := 0; i < 5; i++ {
    fmt.Println(i)
}
// Output: 0 1 2 3 4

2. For Như While

// Chỉ có điều kiện (giống while)
count := 0
for count < 5 {
    fmt.Println(count)
    count++
}

3. Vòng Lặp Vô Hạn

// Không có điều kiện = chạy mãi
for {
    fmt.Println("Chạy mãi...")
    // Phải có break để thoát
    break
}
⚠️ Cảnh báo: Vòng lặp vô hạn không có break sẽ làm treo chương trình!

4. Break và Continue

// break - thoát khỏi vòng lặp
for i := 0; i < 10; i++ {
    if i == 5 {
        break  // Dừng khi i = 5
    }
    fmt.Println(i)
}
// Output: 0 1 2 3 4

// continue - bỏ qua lần lặp hiện tại
for i := 0; i < 5; i++ {
    if i == 2 {
        continue  // Bỏ qua khi i = 2
    }
    fmt.Println(i)
}
// Output: 0 1 3 4

5. Vòng Lặp Range

range dùng để duyệt qua slice, array, map, string.

// Duyệt slice
numbers := []int{10, 20, 30, 40}
for index, value := range numbers {
    fmt.Printf("Index %d: %d\n", index, value)
}

// Chỉ lấy value (bỏ qua index với _)
for _, value := range numbers {
    fmt.Println(value)
}

// Duyệt string
for i, char := range "Go" {
    fmt.Printf("%d: %c\n", i, char)
}
// 0: G
// 1: o
💡 Mẹo: Dùng _ (blank identifier) để bỏ qua giá trị không cần.

6. Vòng Lặp Lồng Nhau

// In bảng cửu chương
for i := 1; i <= 3; i++ {
    for j := 1; j <= 3; j++ {
        fmt.Printf("%d x %d = %d\t", i, j, i*j)
    }
    fmt.Println()
}
// 1 x 1 = 1    1 x 2 = 2    1 x 3 = 3
// 2 x 1 = 2    2 x 2 = 4    2 x 3 = 6
// 3 x 1 = 3    3 x 2 = 6    3 x 3 = 9

📝 Tóm Tắt