Modül dersleri (4/5)
Deyimsel anahtar
Go'nun switch'si C/Java'nınkinden daha ergonomiktir: her case'nin kendine ait
kendi örtülü bloğunuz var (yazılacak break yok), gruplayabilirsiniz
virgüllü birden fazla değer ve ifade içermeyen bir switch davranışı sergilenir
daha okunabilir bir if/else if zinciri gibi.
Bir değeri açın
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
fmt.Println("feriale")
case "sab", "dom":
fmt.Println("weekend")
default:
fmt.Println("sconosciuto")
}case virgülle ayrılmış birden fazla değeri kabul eder ve örtük bir değer yoktur
geçiş: bir vaka yürütülür yürütülmez anahtar çıkar.
Koşul olmadan geçiş yap
İfadeyi atlarsanız, anahtar true değerini değerlendirir ve her case bir
bool durumu. Uzun if/else if zincirlerine deyimsel bir alternatiftir:
switch {
case x < 0:
fmt.Println("negativo")
case x == 0:
fmt.Println("zero")
case x < 10:
fmt.Println("piccolo")
default:
fmt.Println("grande")
}Başlatma ifadesi
if ile olduğu gibi, switch da bir init ifadesini kabul eder:
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n yalnızca anahtarın içinde bulunur.
Açık fallthrough
Eğer infazın gerçekten bir sonraki duruma düşmesini istiyorsanız, şunu yazmalısınız:
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}Tür anahtarı (önizleme)
Bir arayüzün dinamik türüne göre ayrım yapmanızı sağlar değer. Arayüzler modülünde bu konuyu derinlemesine ele alacağız:
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)
}Deneyin
g değerindeki bir anahtarı kullanarak lun/mar/mer/gio/ven için 'feriale', aksi takdirde 'weekend' yazın.
İpucu göster
Haftanın 5 gününü virgülle ayırarak tek bir vakada gruplayın.
3 denemeden sonra çözüm mevcut
X'e bağlı olarak 'negatif', 'sıfır' veya 'konum' yazdırmak için koşul OLMADAN bir anahtar kullanın.
İpucu göster
'Switch'ten sonra ifade yok, sadece '{`.
3 denemeden sonra çözüm mevcut
Bu program ne yazdırıyor?
switch 1 {
case 1:
fmt.Print("a")
case 2:
fmt.Print("b")
}Özet
casevirgülle ayrılmış birden çok değeri kabul eder.- Örtülü geçiş yok: her vakanın kendi örtülü
break'si vardır. switch { ... }ifade olmadan = daha okunabilir birif/else ifzinciri.- Init ifadesi:
switch x := f(); { ... }, kapsam blokla sınırlıdır. fallthroughvar ama nadirdir; durumunu değerlendirmeden bir sonraki duruma girer.- Dinamik türe (Arayüzler modülü) göre ayrım yapmak için
v := i.(type)anahtarını yazın.