Golang giống như hầu hết các ngôn ngữ lập trình khác đều có câu lệnh switch. Câu lệnh switch trong Golang cho phép bạn đánh giá một biến hoặc biểu thức theo nhiều trường hợp và thường được sử dụng khi viết nhiều câu lệnh if-else khiến code trông xấu xí và lặp lại.
Trong Go, câu lệnh switch là câu lệnh rẽ nhánh đa hướng, chỉ đạo thực thi hiệu quả dựa trên giá trị (hoặc kiểu) của một biểu thức. Có hai loại câu lệnh switch chính trong Go:
- Expression Switch
- Type Switch
Ví dụ:
package main
import "fmt"
func main() {
day := 4
switch day {
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")
default:
fmt.Println("Invalid day")
}
}
Cú pháp lệnh switch trong Golang
switch optstatement; optexpression {
case expression1:
// Khối code
case expression2: # Expression Switch
// Khối code
default:
// Khối code
}
switch var := interfaceValue.(type) {
case type1:
// Khối code
case type2: # Type Switch
// Khối code
default:
// Khối code
}
Expression Switch
Expression Switch đánh giá một biểu thức và chuyển sang một trường hợp dựa trên giá trị của biểu thức đó. Nếu không có biểu thức nào được cung cấp, switch sẽ mặc định là true.
Cú pháp
switch optstatement; optexpression {
case expression1:
// Khối code
case expression2:
// Khối code
default:
// Khối code
}
optstatement: Câu lệnh tùy chọn (ví dụ: khai báo biến).
optexpression: Biểu thức tùy chọn (nếu bỏ qua, mặc định là true).
Ví dụ với lệnh tùy chọn
Ở đây giới thiệu một câu lệnh tùy chọn khai báo một biến day. Câu lệnh switch sau đó đánh giá day theo nhiều trường hợp khác nhau.
package main
import "fmt"
func main() {
switch day := 4; day {
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")
default:
fmt.Println("Invalid day")
}
}
Kết quả:
Thursday
Ví dụ với Expression tùy chọn
Nếu không có biểu thức nào được chỉ định, câu lệnh switch trong Golang sẽ coi biểu thức là đúng. Điều này cho phép chúng ta sử dụng các điều kiện boolean trong các câu lệnh theo trường hợp.
package main
import "fmt"
func main() {
day := 4
switch {
case day == 1:
fmt.Println("Monday")
case day == 4:
fmt.Println("Thursday")
case day > 5:
fmt.Println("Weekend")
default:
fmt.Println("Invalid day")
}
}
Kết quả
Thursday
Type Switch
Type Switch được sử dụng để phân nhánh theo kiểu của giá trị giao diện, thay vì giá trị của nó. Điều này đặc biệt hữu ích khi xử lý các biến có kiểu không xác định.
Cú pháp
switch var := interfaceValue.(type) {
case type1:
// Khối code
case type2:
// Khối code
default:
// Khối code
}
Ví dụ:
Ví dụ này sử dụng cùng biến day nhưng được gói trong interface{} để minh họa cho việc chuyển đổi kiểu.
package main
import "fmt"
func main() {
var day interface{} = 4
switch v := day.(type) {
case int:
switch v {
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")
default:
fmt.Println("Invalid day")
}
default:
fmt.Printf("Unknown type: %T\n", v)
}
}
Kết quả:
Thursday