Các cấu trúc đưa ra quyết định đòi hỏi lập trình viên đưa ra một hoặc nhiều điều kiện để chương trình đánh giá hoặc kiểm tra, đi kèm với nó là một hoặc nhiều câu lệnh được thực hiện nếu câu điều kiện xác định là true
, và tùy chọn, các câu lệnh khác sẽ được thực hiện nêu điều kiện là false
Câu lệnh if
Câu lệnh if
thường được sử dụng để chỉ định rằng liệu đoạn code này sẽ được thực hiện hay không dựa trên điều kiện truyền vào.
Sau đây là cú pháp của câu lệnh if
trong Go
if(Điều_kiện_kiểm_tra) { // Code được thực hiện nếu điều kiện kiểm tra là true. }
Hãy cùng xem ví dụ sau đây
package main import "fmt" func main() { var x = 25 if(x % 5 == 0) { fmt.Printf("%d is a multiple of 5\n", x) } }
Kết quả
25 is a multiple of 5
Chú ý rằng trong Go bạn có thể không sử dụng dấu ngoặc đơn (), nhưng dấu ngoặc nhọn {} là bắt buộc
var y = -1 if y < 0 { fmt.Printf("%d is negative\n", y) }
Bạn có thể kết hợp nhiều điều kiện với nhau sử dụng toán tử &&
hoặc ||
var age = 21 if age >= 17 && age <= 30 { fmt.Println("My Age is between 17 and 30") }
Câu lệnh if-Else
Một câu lệnh if
có thể kết hợp với một khối else
. Một khối else
được thực thi nếu câu điều kiện của if
được chỉ định là false
if điều_kiện_kiểm_tra { // code được thực hiện nếu điều kiện là true } else { // code được thực hiện nếu điều kiện là false }
Hãy cùng xem ví dụ sau đây
package main import "fmt" func main() { var age = 18 if age >= 18 { fmt.Println("You're eligible to vote!") } else { fmt.Println("You're not eligible to vote!") } }
Kết quả
You're eligible to vote!
Chuỗi if-else-if
Câu lệnh if
có thể có nhiều phần else if
tạo thành một chuỗi các điều kiện như sau
package main import "fmt" func main() { var BMI = 21.0 if BMI < 18.5 { fmt.Println("You are underweight"); } else if BMI >= 18.5 && BMI < 25.0 { fmt.Println("Your weight is normal"); } else if BMI >= 25.0 && BMI < 30.0 { fmt.Println("You're overweight") } else { fmt.Println("You're obese") } }
Kết quả
Your weight is normal
if với cậu lệnh viết tắt
Một câu lệnh if
trong Go cũng có thể chứa câu lệnh khai báo tắt đứng trước
if n := 10; n%2 == 0 { fmt.Printf("%d is even\n", n) }
Biến được khai báo trong câu lệnh viết tắt chỉ sử dụng bên trong khối if
, trong else
của nó, hoặc các nhánh else-if
if n := 15; n%2 == 0 { fmt.Printf("%d is even\n", n) } else { fmt.Printf("%d is odd\n", n) }
Chú ý rằng khi bạn sử dụng câu lệnh viết tắt, thì sẽ không thể đặt nó trong ngoặc đơn (), câu lệnh sau đây sẽ đưa ra một lỗi liên quan đến cú pháp
// Bạn không thể sử dụng ngoặc đơn nếu if chứa câu lệnh viết tắt if (n := 15; n%2 == 0) { // Cú pháp lỗi }
Câu lệnh switch
Câu lệnh switch
cho phép một biến được kiểm tra xem nó có khớp với giá trị nào trong một danh sách được định nghĩa trước. Mỗi giá trị được gọi trong một case
, và biến được chuyển đổi kiểm tra lần lượt qua từng switch case
. Nếu khớp thì nó sẽ thực thi một khối code ở trong case
package main import "fmt" func main() { var dayOfWeek = 6 switch dayOfWeek { case 1: fmt.Println("Monday") case 2: fmt.Println("Tuesday") case 3: fmt.Println("Wednesday") case 4: fmt.Println("Thursday") case 5: fmt.Println("Friday") case 6: { fmt.Println("Saturday") fmt.Println("Weekend. Yaay!") } case 7: { fmt.Println("Sunday") fmt.Println("Weekend. Yaay!") } default: fmt.Println("Invalid day") } }
Kết quả
Saturday Weekend. Yaay!
Go sẽ đánh giá tất cả các switch case
từng cái một từ trên xuống dưới cho đến khi thành công thì thôi. Khi một case
thành công, nó sẽ chạy đoạn code chỉ định bên trong và sau đó kết thúc (Nó sẽ không kiểm tra các case
còn lại nữa).
Nó sẽ hơi khác các ngôn ngữ thông thường như C, C++, Java, chúng ta cần chỉ định rõ ràng bằng các chèn câu lệnh break
để thoát sau khi toàn bộ đoạn code trong case
đã được tính toán và kết thúc.
Nếu không có case
nào phù hợp thì case
mặc định sẽ được chạy.
switch với câu lệnh viết tắt
Giống như if
, switch
cũng có thể chứa các câu lệnh khai báo tắt đứng trước biểu thức điều kiện. Nên bạn có thể viết lại ví dụ trước như sau
switch dayOfWeek := 6; dayOfWeek { case 1: fmt.Println("Monday") case 2: fmt.Println("Tuesday") case 3: fmt.Println("Wednesday") case 4: fmt.Println("Thursday") case 5: fmt.Println("Friday") case 6: { fmt.Println("Saturday") fmt.Println("Weekend. Yaay!") } case 7: { fmt.Println("Sunday") fmt.Println("Weekend. Yaay!") } default: fmt.Println("Invalid day") }
Chỉ có một điểm khác là biến được khai báo tắt và chỉ sử dụng được bên trong khối switch
Kết hợp nhiều switch case
Bạn có thể kết hợp nhiều switch case trong một như sau
package main import "fmt" func main() { switch dayOfWeek := 5; dayOfWeek { case 1, 2, 3, 4, 5: fmt.Println("Weekday") case 6, 7: fmt.Println("Weekend") default: fmt.Println("Invalid Day") } }
Kết quả
Weekday
Điều này khá là tiện lợi khi bạn muốn chạy một logic chung cho nhiều trường hợp.
Không sử dụng biểu thức
Trong Go, biểu thức mà chúng ta chỉ định trong câu lệnh switch
là không bắt buộc. Câu lệnh switch không có biểu thức là tương đương với switch true
. Nó sẽ tính toán từng bước, từng bước một và sẽ thực thi case
đầu tiên mà tính toán là true
package main import "fmt" func main() { var BMI = 21.0 switch { case BMI < 18.5: fmt.Println("You're underweight") case BMI >= 18.5 && BMI < 25.0: fmt.Println("Your weight is normal") case BMI >= 25.0 && BMI < 30.0: fmt.Println("You're overweight") default: fmt.Println("You're obese") } }
switch
không có biểu thức có thể hiểu đơn giản là cách viết chuỗi các if-else-if