ماڈیول اسباق (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 خود کو ہینڈل کرنے کے لیے اندرونی طور پر ٹائپ سوئچ کا استعمال کرتا ہے۔
معیاری فارمیٹس
قسم سوئچ بمقابلہ عکاسی۔
چند معلوم اقسام کے لیے → ٹائپ سوئچ (تیز، پڑھنے کے قابل)۔
نامعلوم اقسام کے متحرک معائنہ کے لیے → reflect پیکیج (مزید
طاقتور لیکن سست اور زیادہ لفظی)۔
اسے آزمائیں
describe(i انٹرفیس{}) اسٹرنگ کو نافذ کریں جو متحرک قسم کے لحاظ سے 'int'، 'string' یا 'altro' لوٹاتا ہے۔
اشارہ دکھائیں۔
نحو: `switch i.(type) { case T: ... ڈیفالٹ: ... }`۔
3 کوششوں کے بعد حل دستیاب ہے۔
پرنٹ وال(i انٹرفیس{}) لکھیں جو v := i.(type) استعمال کرتا ہے اور int کے لیے %d، سٹرنگ کے لیے %s کے ساتھ پرنٹ کرتا ہے۔
اشارہ دکھائیں۔
'case int' کے اندر، v میں int ٹائپ ہوتا ہے (آپ اسے پرنٹف میں بھیج سکتے ہیں)۔
3 کوششوں کے بعد حل دستیاب ہے۔
کون سا نحو ٹائپ سوئچ شروع کرتا ہے؟
switch ??? {
case int: ...
}Recap
switch v := i.(type) { case T: ... }: متحرک قسم پر امتیاز کرتا ہے۔- ایک قسم کے کیس کے اندر،
vمیں کیس کی قسم ہے۔ case T1, T2:vاصل انٹرفیس کی قسم کو برقرار رکھتا ہے۔defaultغیر ہینڈل کیسز کے لیے؛case nilصفر انٹرفیس کے لیے۔- قسم کے سوئچز میں کوئی
fallthroughنہیں۔ - 1 قسم → قسم کا دعوی؛ 2+ اقسام → ٹائپ سوئچ۔