Vòng lặp được sử dụng để chạy một đoạn code lặp đi lặp lại nhiều lần. Thông thường, các câu lệnh được xử lý tuần tự nối tiếp nhau. Một câu lệnh vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một nhóm các câu lệnh nhiều lần.
for
là vòng lặp duy nhất được hỗ trợ bởi Go. Go không hỗ trợ vòng lặp while và do while thường hiện diện trong các ngôn ngữ khác như là C, C++.
Ngôn ngữ lập trình Go cung cấp những kiểu vòng lặp sau để xử lý các yêu cầu lặp
- Vòng lặp for
- Vòng lặp nested for
Vòng lặp for
Sau đây là cú pháp của vòng lặp for
trong Go
for Khởi tạo; điều kiện; tăng { // body vòng lặp }
Câu lệnh khởi tạo được chạy đúng một lần trước khi chạy vòng lặp đầu tiên. Mỗi lần lặp, điều kiện được kiểm tra. Nếu điều kiện là true
, thì phần body của vòng lặp sẽ được chạy, nếu không, vòng lặp sẽ kết thúc. Câu lệnh tăng
sẽ được gọi sau mỗi lần vòng lặp kết thúc.
Sau đây là ví dụ của vòng lặp for
package main import "fmt" func main() { for i := 0; i < 10; i++ { fmt.Printf("%d ", i) } }
Kết quả
0 1 2 3 4 5 6 7 8 9
Không giống như các ngôn ngữ lập trình khác như là C, C++, Java, vòng lặp for
của Go không cần phải chứa dấu ngoặc đơn, và dấu ngoặc nhọn là bắt buộc.
Cả hai câu lệnh khởi tạo và tăng giá trị trong vòng lặp for
là không bắt buộc và có thể được bỏ qua.
Ví dụ sau bỏ qua câu lệnh khởi tạo.
package main import "fmt" func main() { i := 2 for ;i <= 10; i += 2 { fmt.Printf("%d ", i) } }
Kết quả
2 4 6 8 10
Ví dụ bỏ qua câu lệnh tăng giá trị
package main import "fmt" func main() { i := 2 for ;i <= 20; { fmt.Printf("%d ", i) i *= 2 } }
Kết quả
2 4 8 16
Chú ý rằng bạn có thể bỏ qua dấu chấm phẩy trong vòng lặp for
và viết lại ví dụ trên như sau
package main import "fmt" func main() { i := 2 for i <= 20 { fmt.Printf("%d ", i) i *= 2 } }
Vòng lặp for ở trên giống hệt như vòng lặp while
ở trong các ngôn ngữ lập trình khác. Go không có vòng lặp while
bởi vì chúng ta có thể dễ dàng biểu diễn vòng lặp while
sử dụng vòng lặp for
Cuối cùng, chúng ta có thể bỏ điều kiện trong vòng lặp for
, biến nó thành vòng lặp vô hạn
package main func main() { // Vòng lặp vô hạn for { } }
Câu lệnh break
Chúng ta có thể sử dụng câu lệnh break
để thoát ra khỏi vòng lặp trước khi nó thoát như thông thường.
package main import "fmt" func main() { for num := 1; num <= 100; num++ { if num%3 == 0 && num%5 == 0 { fmt.Printf("First positive number divisible by both 3 and 5 is %d\n", num) break } } }
Kết quả
First positive number divisible by both 3 and 5 is 15
Câu lệnh continue
Câu lệnh continue
được sử dụng để dừng việc chạy các câu lệnh trong body của vòng lặp và tiếp tục thực hiện vòng lặp tiếp theo.
package main import "fmt" func main() { for num := 1; num <= 10; num++ { if num%2 == 0 { continue; } fmt.Printf("%d ", num) } }
Kết quả
1 3 5 7 9
Vòng lặp nested for
Một vòng lặp for
mà chứa vòng lặp for
khác bên trong thì nó được gọi là vòng lặp nested for.
Để hiểu hơn về khái niệm này, hãy thử viết một chương trình và in ra như sau
* ** *** **** *****
Đoạn code bên dưới đây sẽ sử dụng nested for để in ra chuỗi trên. Biến n
ở hàng thứ 8 sẽ được dùng để định nghĩa số hàng được in ra. Trong ví dụ này sẽ là 5. Vòng lặp bên ngoài i
chạy từ 0 đến 4. Vòng lặp bên trong j
chạy từ 0 đến j
. Bên trong vòng lặp for in * cho mỗi lần lặp và vòng lặp bên ngoài sẽ in ra ký tự xuống dòng
package main import ( "fmt" ) func main() { n := 5 for i := 0; i < n; i++ { for j := 0; j <= i; j++ { fmt.Print("*") } fmt.Println() } }