Câu lệnh switch-case
trong Golang cho phép bạn thực hiện nhiều điều kiện khác nhau dựa trên giá trị của một biến hoặc hàm. Nó giống như một chuỗi các lệnh if-else-if, câu lệnh này tiện dụng và ngắn gọn hơn trong trường hợp chúng ta cần so sánh nhiều điều kiện.
Cú pháp câu lệnh switch case trong Golang
switch <biến> { case <giá trị so sánh> }
Trong ví dụ dưới đây, chúng ta có một biến là month
dùng để gán giá trị tháng trong năm, sau đó sẽ so sánh biến này để xuất ra màn hình số ngày tương ứng trong tháng đó.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main
import "fmt"
func main() {
month := 5
switch month {
case 1:
fmt.Println("31 ngay")
case 2:
fmt.Println("28 hoac 29 ngay")
case 3:
fmt.Println("31 ngay")
case 4:
fmt.Println("30 ngay")
case 5:
fmt.Println("31 ngay")
case 6:
fmt.Println("30 ngay")
case 7:
fmt.Println("31 ngay")
case 8:
fmt.Println("31 ngay")
case 9:
fmt.Println("30 ngay")
case 10:
fmt.Println("31 ngay")
case 11:
fmt.Println("30 ngay")
case 12:
fmt.Println("31 ngay")
default:
fmt.Println("Thang khong hop le")
}
}
// Kết quả: 31 ngay
Khác với ngôn ngữ C, chúng ta không cần câu lệnh break;
sau mỗi câu lệnh case
Câu lệnh bên trong default
sẽ được thực thi khi không có điều kiện nào đáp ứng.
switch <biến> { case <nhiều giá trị so sánh> }
Chúng ta có thể đặt nhiều giá trị so sánh trong cùng một câu lệnh case
, chương trình trên có thể rút gọn như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main
import "fmt"
func main() {
month := 10
switch month {
case 1, 3, 5, 7, 8, 10, 12:
fmt.Println("31 ngay")
case 2:
fmt.Println("28 hoac 29 ngay")
case 4, 6, 9, 11:
fmt.Println("30 ngay")
default:
fmt.Println("Thang khong hop le")
}
}
// Kết quả: 31 ngay
switch { case <biểu thức luận lý> }
Chúng ta có thể lược bỏ biến sau câu lệnh switch
và thay vào đó là biểu thức luận lý (trả về true/false) trong các câu lệnh case
Ví dụ dưới đây sẽ xuất ra tháng đó thuộc quý nào trong năm bằng cách dùng biểu thức luận lý trong các câu lệnh case
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
import "fmt"
func main() {
month := 5
switch {
case month >= 1 && month <= 3:
fmt.Println("Quy I")
case month >= 4 && month <= 6:
fmt.Println("Quy II")
case month >= 7 && month <= 9:
fmt.Println("Quy III")
case month >= 10 && month <= 12:
fmt.Println("Quy IV")
default:
fmt.Println("Thang khong hop le")
}
}
// Kết quả: Quy II
Câu lệnh fallthrough trong Golang
Khi thỏa một điều kiện của case
thì chương trình Go sẽ thực hiện khổi lệnh bên trong case đó, và sau đó là thoát khỏi khối lệnh switch
.
Tuy nhiên, từ khóa fallthrough
được sử dụng trong câu lệnh switch để cho phép chuyển qua các case tiếp theo. Điều này có nghĩa là, nếu một trường hợp được thực hiện, trường hợp tiếp theo trong câu lệnh switch cũng sẽ được thực hiện, cho dù điều kiện của chúng không đúng.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
func main() {
char := "A"
switch char {
case "A":
fmt.Print("A")
case "B":
fmt.Print("B")
case "C":
fmt.Print("C")
default:
fmt.Print("Default")
}
}
// Kết quả: A
Như ở ví dụ trên, chúng ta khai báo biến char
có giá trị là A. Sau đó bên trong switch, A thỏa điều kiện của case đầu tiên, do đó khối lệnh bên trong case này sẽ được thực thi và thoát khỏi switch
Khi đặt từ khóa fallthrough
ở cuối khối lệnh trong 1 case, thì khối lệnh trong case tiếp theo sẽ được thực thi mà không kiểm tra điều kiện của case đó
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
func main() {
char := "A"
switch char {
case "A":
fmt.Print("A")
fallthrough
case "B":
fmt.Print("B")
case "C":
fmt.Print("C")
fallthrough
default:
fmt.Print("Default")
}
}
// Kết quả: AB
// Nếu char := "C" thì kết quả là: CDefault
Cần chú ý là việc sử dụng fallthrough có thể gây rối và khó để debug trong một chương trình lớn, vì vậy nên sử dụng nó với cẩn thận.
Câu lệnh break trong Golang
Từ khóa break
được sử dụng trong câu lệnh switch để thoát khỏi một câu lệnh switch hoặc một vòng lặp. Nó có thể được sử dụng để dừng thực thi các trường hợp còn lại trong một câu lệnh switch sau khi một trường hợp được thực hiện.
Tóm lại sau khi gặp câu lệnh break
thì chương trình sẽ thoát ra khỏi switch mà không thực hiện các câu lệnh tiếp theo nữa
Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
import "fmt"
func main() {
char := "A"
switch char {
case "A":
fmt.Print("1")
fmt.Print("2")
break
fmt.Print("3")
default:
fmt.Print("Default")
}
}
// Kết quả: 12
Mặc dù bên trong case có 3 câu lệnh, nhưng khi thực hiện xong câu lệnh 1 và 2 thì gặp break
do đó câu lệnh thứ 3 không được thực hiện nữa và thoát khỏi switch