Pelajaran modul (4/5)
Sakelar idiomatis
switch Go lebih ergonomis dibandingkan C/Java: masing-masing case memiliki
blok implisitnya sendiri (tidak ada break untuk ditulis), Anda dapat mengelompokkannya
beberapa nilai dengan koma, dan switch berperilaku tanpa ekspresi
seperti rantai if/else if yang lebih mudah dibaca.
Aktifkan suatu nilai
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
fmt.Println("feriale")
case "sab", "dom":
fmt.Println("weekend")
default:
fmt.Println("sconosciuto")
}case menerima beberapa nilai yang dipisahkan dengan koma dan tidak ada yang tersirat
fallthrough: segera setelah kasus dijalankan, saklar keluar.
Beralih tanpa syarat
Jika Anda menghilangkan ekspresi tersebut, saklar akan mengevaluasi true dan setiap case adalah a
kondisi bool. Ini adalah alternatif idiomatis untuk rantai if/else if yang panjang:
switch {
case x < 0:
fmt.Println("negativo")
case x == 0:
fmt.Println("zero")
case x < 10:
fmt.Println("piccolo")
default:
fmt.Println("grande")
}Pernyataan init
Seperti halnya if, switch juga menerima pernyataan init:
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n hanya ada di dalam saklar.
Eksplisit fallthrough
Jika Anda benar-benar ingin eksekusi masuk ke kasus berikutnya, Anda harus menulisnya:
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}Sakelar tipe (pratinjau)
Ini memungkinkan Anda melakukan diskriminasi berdasarkan tipe dinamis antarmuka nilai. Kami akan membahasnya secara mendalam di modul Antarmuka:
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)
}Cobalah
Cetak 'feriale' untuk lun/mar/mer/gio/ven, 'weekend' jika tidak, gunakan tombol pada nilai g.
Tunjukkan petunjuk
Kelompokkan 5 hari kerja menjadi satu kasus yang dipisahkan dengan koma.
Solusi tersedia setelah 3 upaya
Gunakan saklar TANPA syarat untuk mencetak 'neg', 'zero' atau 'pos' tergantung pada x.
Tunjukkan petunjuk
Tidak ada ekspresi setelah `switch`, hanya `{`.
Solusi tersedia setelah 3 upaya
Apa yang dicetak oleh program ini?
switch 1 {
case 1:
fmt.Print("a")
case 2:
fmt.Print("b")
}Rekap
casemenerima beberapa nilai yang dipisahkan dengan koma.- Tidak ada kesalahan implisit: setiap kasus memiliki
breakimplisitnya sendiri. switch { ... }tanpa ekspresi = rantaiif/else ifyang lebih mudah dibaca.- Pernyataan init:
switch x := f(); { ... }, cakupannya terbatas pada blok. fallthroughada tetapi jarang; memasuki kasus berikutnya TANPA mengevaluasi kondisinya.- Ketik saklar
v := i.(type)untuk membedakan berdasarkan tipe dinamis (modul Antarmuka).