মডিউল পাঠ (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 প্যাকেজ (আরো
শক্তিশালী কিন্তু ধীর এবং আরো শব্দযুক্ত)।
চেষ্টা করে দেখুন
ডায়নামিক টাইপের উপর নির্ভর করে 'int', 'স্ট্রিং' বা 'altro' প্রদানকারী বর্ণনা (i ইন্টারফেস{}) স্ট্রিং প্রয়োগ করুন।
ইঙ্গিত দেখান
সিনট্যাক্স: `switch i.(type) { case T: ... ডিফল্ট: ... }`।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
লিখুন printVal(i ইন্টারফেস{}) যা v := i.(টাইপ) ব্যবহার করে এবং int-এর জন্য %d, স্ট্রিং-এর জন্য %s দিয়ে প্রিন্ট করে।
ইঙ্গিত দেখান
`case int`-এর ভিতরে, v-এর টাইপ আছে int (আপনি এটি Printf-এ পাঠাতে পারেন)।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
কোন সিনট্যাক্স একটি টাইপ সুইচ শুরু করে?
switch ??? {
case int: ...
}রিক্যাপ
switch v := i.(type) { case T: ... }: গতিশীল প্রকারের উপর বৈষম্য করে।- একটি একক-টাইপ কেসের ভিতরে,
vকেসের ধরন আছে৷ case T1, T2:vমূল ইন্টারফেসের ধরন রাখে।defaultআন-হ্যান্ডেল করা ক্ষেত্রে;case nilশূন্য ইন্টারফেসের জন্য।- টাইপ সুইচগুলিতে
fallthroughনেই৷ - 1 প্রকার → প্রকার দাবী; 2+ প্রকার → টাইপ সুইচ।