Ana içeriğe geç
Modül 2 · Ders 4 ders 5Kurstaki 9/50~10 min
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

Go
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:

Go
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:

Go
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:

Go
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:

Go
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

Egzersiz#go.m2.l4.e1
Denemeler: 0Yükleniyor…

g değerindeki bir anahtarı kullanarak lun/mar/mer/gio/ven için 'feriale', aksi takdirde 'weekend' yazın.

Düzenleyici yükleniyor…
İpucu göster

Haftanın 5 gününü virgülle ayırarak tek bir vakada gruplayın.

3 denemeden sonra çözüm mevcut

Egzersiz#go.m2.l4.e2
Denemeler: 0Yükleniyor…

X'e bağlı olarak 'negatif', 'sıfır' veya 'konum' yazdırmak için koşul OLMADAN bir anahtar kullanın.

Düzenleyici yükleniyor…
İpucu göster

'Switch'ten sonra ifade yok, sadece '{`.

3 denemeden sonra çözüm mevcut

Quiz#go.m2.l4.e3
Hazır

Bu program ne yazdırıyor?

Go
switch 1 {
case 1:
    fmt.Print("a")
case 2:
    fmt.Print("b")
}
Cevap seçenekleri

Özet

  • case virgü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 bir if/else if zinciri.
  • Init ifadesi: switch x := f(); { ... }, kapsam blokla sınırlıdır.
  • fallthrough var 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.