Bài học theo mô-đun (4/5)
Công tắc thành ngữ
switch của Go tiện dụng hơn C/Java: mỗi case đều có
khối ẩn riêng (không có break để viết), bạn có thể nhóm
nhiều giá trị có dấu phẩy và switch không có biểu thức sẽ hoạt động
giống như chuỗi if/else if dễ đọc hơn.
Bật một giá trị
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
fmt.Println("feriale")
case "sab", "dom":
fmt.Println("weekend")
default:
fmt.Println("sconosciuto")
}case chấp nhận nhiều giá trị được phân tách bằng dấu phẩy và không có giá trị ngầm định nào
dự phòng: ngay khi một trường hợp được thực thi, switch sẽ thoát.
Chuyển đổi không có điều kiện
Nếu bạn bỏ qua biểu thức, switch sẽ đánh giá true và mỗi case là một
bool tình trạng. Đây là sự thay thế thành ngữ cho chuỗi if/else if dài:
switch {
case x < 0:
fmt.Println("negativo")
case x == 0:
fmt.Println("zero")
case x < 10:
fmt.Println("piccolo")
default:
fmt.Println("grande")
}Câu lệnh khởi tạo
Giống như if, switch cũng chấp nhận câu lệnh init:
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n chỉ tồn tại bên trong switch.
Rõ ràng fallthrough
Nếu bạn thực sự muốn việc thực thi rơi vào trường hợp tiếp theo, bạn phải viết nó:
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}Chuyển đổi loại (xem trước)
Nó cho phép bạn phân biệt dựa trên loại động của giao diện giá trị. Chúng tôi sẽ đề cập sâu hơn về mô-đun Giao diện:
var i interface{} = "ciao"
switch v := i.(type) {
case int:
fmt.Println("int:", v)
case string:
fmt.Println("string:", v)
default:
fmt.Printf("tipo %T\n", v)
}Hãy thử nó
In 'feriale' cho lun/mar/mer/gio/ven, ngược lại là 'weekend', sử dụng nút chuyển trên giá trị của g.
Hiển thị gợi ý
Nhóm 5 ngày trong tuần thành một trường hợp duy nhất được phân tách bằng dấu phẩy.
Giải pháp khả dụng sau 3 lần thử
Sử dụng một công tắc KHÔNG CÓ điều kiện để in 'neg', 'zero' hoặc 'pos' tùy thuộc vào x.
Hiển thị gợi ý
Không có biểu thức nào sau `switch`, chỉ có `{`.
Giải pháp khả dụng sau 3 lần thử
Chương trình này in gì?
switch 1 {
case 1:
fmt.Print("a")
case 2:
fmt.Print("b")
}Tóm tắt lại
casechấp nhận nhiều giá trị được phân tách bằng dấu phẩy.- Không có dự phòng ngầm: mỗi trường hợp đều có
breaktiềm ẩn riêng. switch { ... }không có biểu thức = chuỗiif/else ifdễ đọc hơn.- Câu lệnh ban đầu:
switch x := f(); { ... }, phạm vi giới hạn trong khối. fallthroughtồn tại nhưng hiếm; đi vào trường hợp tiếp theo mà KHÔNG đánh giá tình trạng của nó.- Chuyển đổi loại
v := i.(type)để phân biệt dựa trên loại động (mô-đun Giao diện).