ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 2 · 5లో పాఠం 4కోర్సులో 9/50~10 min
మాడ్యూల్ పాఠాలు (4/5)

ఇడియోమాటిక్ స్విచ్

గో యొక్క switch అనేది C/Java కంటే ఎక్కువ సమర్థత కలిగి ఉంది: ప్రతి case దాని స్వంత అవ్యక్త బ్లాక్ (రాయడానికి break లేదు), మీరు సమూహం చేయవచ్చు కామాతో బహుళ విలువలు మరియు వ్యక్తీకరణ లేకుండా switch ప్రవర్తిస్తుంది మరింత చదవగలిగే if/else if చైన్ లాగా.

విలువను ఆన్ చేయండి

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 కామాలతో వేరు చేయబడిన బహుళ విలువలను అంగీకరిస్తుంది మరియు అవ్యక్తంగా ఏమీ లేదు ఫాల్‌త్రూ: కేసు అమలు చేయబడిన వెంటనే, స్విచ్ నిష్క్రమిస్తుంది.

షరతు లేకుండా మారండి

మీరు వ్యక్తీకరణను వదిలివేస్తే, స్విచ్ trueని మూల్యాంకనం చేస్తుంది మరియు ప్రతి case ఒక bool పరిస్థితి. ఇది పొడవైన if/else if గొలుసులకు ఇడియోమాటిక్ ప్రత్యామ్నాయం:

Go
switch {
case x < 0:
    fmt.Println("negativo")
case x == 0:
    fmt.Println("zero")
case x < 10:
    fmt.Println("piccolo")
default:
    fmt.Println("grande")
}

Init ప్రకటన

if వలె, switch కూడా init స్టేట్‌మెంట్‌ను అంగీకరిస్తుంది:

Go
switch n := len(s); {
case n == 0:
    fmt.Println("vuoto")
case n > 100:
    fmt.Println("lungo")
default:
    fmt.Println("ok")
}

n స్విచ్ లోపల మాత్రమే ఉంది.

స్పష్టమైన fallthrough

మీరు నిజంగా తదుపరి సందర్భంలో అమలు చేయాలనుకుంటే, మీరు దీన్ని వ్రాయాలి:

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
}

టైప్ స్విచ్ (ప్రివ్యూ)

ఇది ఇంటర్‌ఫేస్ యొక్క డైనమిక్ రకం ఆధారంగా వివక్ష చూపడానికి మిమ్మల్ని అనుమతిస్తుంది విలువ. మేము దానిని ఇంటర్‌ఫేస్‌ల మాడ్యూల్‌లో లోతుగా కవర్ చేస్తాము:

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)
}

దీనిని ప్రయత్నించండి

వ్యాయామం#go.m2.l4.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

lun/mar/mer/gio/ven కోసం 'feriale'ని ప్రింట్ చేయండి, లేకపోతే g విలువపై స్విచ్‌ని ఉపయోగించి 'వారాంతం'.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

5 వారపు రోజులను ఒకే సందర్భంలో కామాలతో వేరు చేయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#go.m2.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

xని బట్టి 'neg', 'zero' లేదా 'pos'ని ప్రింట్ చేయడానికి షరతు లేకుండా స్విచ్‌ని ఉపయోగించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`స్విచ్` తర్వాత వ్యక్తీకరణ లేదు, కేవలం `{`.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

Quiz#go.m2.l4.e3
సిద్ధంగా ఉంది

ఈ ప్రోగ్రామ్ ఏమి ముద్రిస్తుంది?

Go
switch 1 {
case 1:
    fmt.Print("a")
case 2:
    fmt.Print("b")
}
సమాధాన ఎంపికలు

రీక్యాప్

  • case కామాలతో వేరు చేయబడిన బహుళ విలువలను అంగీకరిస్తుంది.
  • అవ్యక్త పతనం లేదు: ప్రతి కేసు దాని స్వంత అవ్యక్త breakని కలిగి ఉంటుంది.
  • switch { ... } వ్యక్తీకరణ లేకుండా = మరింత చదవగలిగే if/else if చైన్.
  • ఇనిట్ స్టేట్‌మెంట్: switch x := f(); { ... }, స్కోప్ బ్లాక్‌కి పరిమితం చేయబడింది.
  • fallthrough ఉంది కానీ చాలా అరుదు; దాని పరిస్థితిని మూల్యాంకనం చేయకుండా తదుపరి సందర్భంలో ప్రవేశిస్తుంది.
  • డైనమిక్ రకం (ఇంటర్‌ఫేస్‌ల మాడ్యూల్) ఆధారంగా వివక్ష చూపడానికి v := i.(type) అని టైప్ చేయండి.