مرکزی مواد پر جائیں
ماڈیول 6 · سبق 3 از 5کورس میں 28/50~10 min
ماڈیول اسباق (3/5)

ٹائپ سوئچ

ایک قسم کا سوئچ ایک کی متعدد ممکنہ اقسام کے درمیان امتیاز کرتا ہے۔ انٹرفیس قدر یہ comma ok کی عامی ہے جب موجود ہوں۔ ایک سے زیادہ کیس.

نحو

Go
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 کو چھوڑ سکتے ہیں:

Go
switch i.(type) {
case int:
    // you know it's an int, but you don't have a variable of that type
case string:
    // ...
}

ایک فارم استعمال کیا جاتا ہے جب آپ کو صرف قسم کی تفریق کرنے کی ضرورت ہوتی ہے، چلانے کی نہیں۔ قدر پر.

ایک ہی معاملے میں متعدد اقسام

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

عام استعمال کیس: فارمیٹ شدہ پرنٹنگ

Go
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 پیکیج (مزید طاقتور لیکن سست اور زیادہ لفظی)۔

اسے آزمائیں

ورزش#go.m6.l3.e1
کوششیں: 0لوڈ ہو رہا ہے…

describe(i انٹرفیس{}) اسٹرنگ کو نافذ کریں جو متحرک قسم کے لحاظ سے 'int'، 'string' یا 'altro' لوٹاتا ہے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

نحو: `switch i.(type) { case T: ... ڈیفالٹ: ... }`۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m6.l3.e2
کوششیں: 0لوڈ ہو رہا ہے…

پرنٹ وال(i انٹرفیس{}) لکھیں جو v := i.(type) استعمال کرتا ہے اور int کے لیے %d، سٹرنگ کے لیے %s کے ساتھ پرنٹ کرتا ہے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

'case int' کے اندر، v میں int ٹائپ ہوتا ہے (آپ اسے پرنٹف میں بھیج سکتے ہیں)۔

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m6.l3.e3
تیار

کون سا نحو ٹائپ سوئچ شروع کرتا ہے؟

Go
switch ??? {
  case int: ...
}
جواب کے اختیارات

Recap

  • switch v := i.(type) { case T: ... }: متحرک قسم پر امتیاز کرتا ہے۔
  • ایک قسم کے کیس کے اندر، v میں کیس کی قسم ہے۔
  • case T1, T2: v اصل انٹرفیس کی قسم کو برقرار رکھتا ہے۔
  • default غیر ہینڈل کیسز کے لیے؛ case nil صفر انٹرفیس کے لیے۔
  • قسم کے سوئچز میں کوئی fallthrough نہیں۔
  • 1 قسم → قسم کا دعوی؛ 2+ اقسام → ٹائپ سوئچ۔