Scroll to top
switch case trong Golang

switch case trong Golang

ByYuto 11/10/2024 23:03
7min read

Hãy tìm hiểu cách sử dụng câu lệnh switch-case trong ngôn ngữ lập trình Golang để điều khiển luồng chương trình của bạn một cách hiệu quả. Tìm hiểu các cách viết switch và cách sử dụng case để xử lý các điều kiện khác nhau và cách sử dụng fallthrough để chuyển qua các case khác.

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 đó.

go
Copy
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:

go
Copy
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:

go
Copy
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.

go
Copy
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 đó

go
Copy
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ụ:

go
Copy
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

Đánh giá bài viết: 4.9/5 (61 đánh giá)
Bạn chưa đánh giá

Bình luận

Author
hoclaptrinh.io author
Tác giả:Yuto Yasunaga

Mình là một full stack developer, tốt nghiệp và làm việc tại Nhật Bản. Trang web này là nơi mình tổng hợp, đúc kết và lưu trữ lại những kiến thức trong quá trình học và làm việc liên quan đến IT.
Hy vọng những bài viết ở website này sẽ có ích cho bạn.