మాడ్యూల్ పాఠాలు (3/5)
స్విచ్ టైప్ చేయండి
ఒక రకం స్విచ్ బహుళ సాధ్యమయ్యే రకాలైన వాటి మధ్య వివక్ష చూపుతుంది
ఇంటర్ఫేస్ విలువ. ఇది ఉన్నప్పుడు comma ok సాధారణీకరణ
ఒకటి కంటే ఎక్కువ కేసులు.
వాక్యనిర్మాణం
func describe(i interface{}) string {
switch v := i.(type) {
case int:
return fmt.Sprintf("int %d", v)
case string:
return fmt.Sprintf("string %q", v)
case nil:
return "nil"
default:
return fmt.Sprintf("altro tipo: %T", v)
}
}i.(type)అనేది ప్రత్యేక సింటాక్స్,switchలోపల మాత్రమే చెల్లుతుంది.v := ...ప్రస్తుత కేసు రకంతో విలువను బంధిస్తుంది:case intలోపల,vరకాన్నిintకలిగి ఉంది.defaultఅన్ని ఇతర రకాలను క్యాచ్ చేస్తుంది; అక్కడvఅసలు ఇంటర్ఫేస్ రకాన్ని కలిగి ఉంది.case nilనిల్ డైనమిక్ రకంతో ఇంటర్ఫేస్తో సరిపోలుతుంది.
"పేరులేని" కేసు
మీకు టైప్ చేసిన విలువ అవసరం లేకపోతే, మీరు vని విస్మరించవచ్చు:
switch i.(type) {
case int:
// you know it's an int, but you don't have a variable of that type
case string:
// ...
}మీరు ఆపరేట్ చేయకుండా, రకాన్ని వివక్షించాల్సిన అవసరం వచ్చినప్పుడు ఉపయోగించే ఫారమ్ విలువ మీద.
ఒకే సందర్భంలో అనేక రకాలు
switch v := i.(type) {
case int, int64:
// here v is still interface{}: the "common" type is just the interface
fmt.Println("numero intero:", v)
case string:
// here v is string
fmt.Println("stringa:", v)
}సాధారణ ఉపయోగ సందర్భం: ఫార్మాట్ చేయబడిన ప్రింటింగ్
func print(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("%d\n", v)
case string:
fmt.Printf("%s\n", v)
case fmt.Stringer:
fmt.Println(v.String())
default:
fmt.Printf("%v\n", v)
}
}fmt.Println స్వయంగా అంతర్గతంగా ఒక రకం స్విచ్ని నిర్వహించడానికి ఉపయోగిస్తుంది
ప్రామాణిక ఫార్మాట్లు.
రకం స్విచ్ vs ప్రతిబింబం
తెలిసిన కొన్ని రకాల → రకం స్విచ్ (ఫాస్ట్, రీడబుల్) కోసం.
తెలియని రకాల డైనమిక్ తనిఖీ కోసం → reflect ప్యాకేజీ (మరిన్ని
శక్తివంతమైనది కానీ నెమ్మదిగా మరియు మరింత వెర్బోస్).
దీనిని ప్రయత్నించండి
డైనమిక్ రకాన్ని బట్టి 'int', 'string' లేదా 'altro'ని అందించే వివరణ (i ఇంటర్ఫేస్{}) స్ట్రింగ్ని అమలు చేయండి.
సూచనను చూపించు
సింటాక్స్: `స్విచ్ i.(రకం) {కేస్ T: ... డిఫాల్ట్: ... }`.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
v := i.(రకం) ఉపయోగించే printVal(i ఇంటర్ఫేస్{})ని వ్రాయండి మరియు int కోసం %d, స్ట్రింగ్ కోసం %sతో ప్రింట్ చేయండి.
సూచనను చూపించు
`కేస్ పూర్ణాంక` లోపల, v పూర్ణాంక రకాన్ని కలిగి ఉంది (మీరు దానిని Printfకి పంపవచ్చు).
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
ఏ సింటాక్స్ టైప్ స్విచ్ను ప్రారంభిస్తుంది?
switch ??? {
case int: ...
}రీక్యాప్
switch v := i.(type) { case T: ... }: డైనమిక్ రకంపై వివక్ష చూపుతుంది.- సింగిల్-టైప్ కేస్ లోపల,
vకేస్ రకాన్ని కలిగి ఉంది. case T1, T2:vఅసలు ఇంటర్ఫేస్ రకాన్ని ఉంచుతుంది.defaultనిర్వహించని కేసుల కోసం; నిల్ ఇంటర్ఫేస్ కోసంcase nil.- రకం స్విచ్లలో
fallthroughలేదు. - 1 రకం → రకం ప్రకటన; 2+ రకాలు → రకం స్విచ్.