ট্র্যাক
/
Go
Go
/
সিলেবাস
/
টাইপ অ্যাসারশন
টা

টাইপ অ্যাসারশন মধ্যে Go

১টি অনুশীলনী

টাইপ অ্যাসারশন সম্পর্কে

Go-তে ইন্টারফেসগুলো অন্তর্নিহিত টাইপ নিয়ে অস্পষ্টতা তৈরি করতে পারে। আসলে, খালি ইন্টারফেস যেকোনো কনক্রিট মানই নিতে পারে (প্রিমিটিভসহ)। টাইপ অ্যাসারশন আমাদের এই সিনট্যাক্স ব্যবহার করে ইন্টারফেস ভ্যালুর অন্তর্নিহিত কনক্রিট মানটি বের করার সুযোগ দেয়: interfaceVariable.(concreteType)।

যদি আমরা এই স্টেটমেন্টের ফলাফল একটি মাত্র মানে অ্যাসাইন করি, তাহলে আমরা দাবি করছি যে ইন্টারফেস ভ্যারিয়েবলটি কনক্রিট টাইপের একটি মান ধারণ করে। এর ফলে, ইন্টারফেস ভ্যালুটি নির্দিষ্ট কনক্রিট টাইপের না হলে রানটাইমে এটি প্যানিক করতে পারে। উদাহরণস্বরূপ:

var input interface{} = 12
str := input.(string) // panic at runtime since input is not a string!

টাইপ অ্যাসারশনের দুটি রিটার্ন ভ্যালুই কাজে লাগিয়ে আমরা পরীক্ষা করতে পারি, কোনো ইন্টারফেস ভ্যালু নির্দিষ্ট কোনো কনক্রিট টাইপ ধারণ করে কি না: অন্তর্নিহিত মান, এবং একটি বুলিয়ান মান যা জানায় অ্যাসারশনটি সফল হয়েছে কি না। উদাহরণস্বরূপ:

str, ok := input.(string) // no panic if input is not a string

input যদি একটি string ধারণ করে, তাহলে str হবে অন্তর্নিহিত মান এবং ok হবে ট্রু। input যদি কোনো string ধারণ না করে, তাহলে str হবে string টাইপের শূন্য মান (অর্থাৎ "", খালি স্ট্রিং) এবং ok হবে ফলস। কোনো ক্ষেত্রেই প্যানিক হয় না।

এই ধরনের ইডিয়ম বেশ কমন:

str, ok := input.(string)
if !ok {
    str = "a default value"
}

টাইপ সুইচ

একটি টাইপ সুইচ পরপর একাধিক টাইপ অ্যাসারশন করতে পারে। এর সিনট্যাক্স একটি টাইপ অ্যাসারশনের মতোই (interfaceVariable.(concreteType)), তবে নির্দিষ্ট concreteType-এর বদলে এটি type কিওয়ার্ডটি ব্যবহার করে। এখানে একটি উদাহরণ:

var i interface{} = 12 // try: 12.3, true, int64(12), []int{}, map[string]int{}

switch v := i.(type) {
case int:
    fmt.Printf("the integer %d\n", v)
case string:
    fmt.Printf("the string %s\n", v)
default:
    fmt.Printf("type, %T, not handled explicitly: %#v\n", v, v)
}
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

টাইপ অ্যাসারশন শিখুন