উদাহরণ 1: গোলং বেসিক টাইপ কাস্টিং
চলুন Go-তে সরাসরি এবং মৌলিক কাস্টিংয়ের উদাহরণ দিয়ে শুরু করা যাক কারণ যেকোন জায়গায় পরিবর্তনশীলের ধরন পরিবর্তন করার জন্য আমাদের টাইপকাস্টিং প্রয়োজন।
প্যাকেজ প্রধানআমদানি (
'fmt'
)
ফাংশন প্রধান () {
ছিল এক্স int = 31
এবং := float64 ( এক্স )
fmt . Println ( এবং )
}
এখানে, আমরা 'int' টাইপের 'x' নামের একটি ভেরিয়েবল ঘোষণা করে মূল ফাংশন দিয়ে শুরু করি এবং এটিকে 31 এর মান দিয়ে বরাদ্দ করি। তারপর, 'y' ভেরিয়েবলটি শর্টহ্যান্ড অ্যাসাইনমেন্ট অপারেটর ':=' ব্যবহার করে ঘোষণা করা হয়। 'y' এর ধরনটি স্বয়ংক্রিয়ভাবে ডান দিকের অভিব্যক্তি থেকে নির্ধারিত হয় যা 'x' কে 'float64' এ রূপান্তরের ফলাফল। সুতরাং, এই প্রোগ্রামে, 'x' এর মানটিকে একটি 'float64' এ রূপান্তরিত করা হয় এবং 'y' এ বরাদ্দ করা হয়।
Go-তে মৌলিক কাস্টিং থেকে যে ফলাফলগুলি পুনরুদ্ধার করা হয়েছে তা নিম্নরূপ প্রদর্শিত হয়:
উদাহরণ 2: গোলং ইমপ্লিসিট টাইপ কাস্টিং
বিভিন্ন ধরনের মধ্যে অন্তর্নিহিত টাইপ কাস্টিং অনুমোদিত নয়। Go শক্তিশালী টাইপিং প্রয়োগ করে যার অর্থ আমরা স্পষ্ট রূপান্তর ছাড়াই এক প্রকারের মানকে অন্য ধরণের হিসাবে সরাসরি বরাদ্দ বা ব্যবহার করতে পারি না। নিম্নলিখিতটিতে, আমরা অন্তর্নিহিত কাস্টিং সম্পাদন করার চেষ্টা করি যা Go দ্বারা ব্যতিক্রম তৈরি করে:
প্যাকেজ প্রধান
আমদানি 'fmt'
ফাংশন প্রধান () {
ছিল পূর্ণসংখ্যা int = 9 . 08
fmt . Printf ( 'পূর্ণসংখ্যা হল %g' , পূর্ণসংখ্যা )
}
এখানে মূল() ফাংশন দিয়ে শুরু হওয়া কোডটি যেখানে একটি 'পূর্ণসংখ্যা' ভেরিয়েবল 'int' টাইপের সাথে ঘোষণা করা হয়েছে। 'পূর্ণসংখ্যা' ভেরিয়েবলের জন্য নির্ধারিত মান হল 9.08 যা একটি ফ্লোটিং-পয়েন্ট সংখ্যা। যেহেতু আমরা একটি পূর্ণসংখ্যা ভেরিয়েবলে সরাসরি একটি ফ্লোটিং-পয়েন্ট মান নির্ধারণ করার চেষ্টা করছি, এটি একটি টাইপ অমিল ত্রুটির ফলাফল করে। তারপর, আমরা '%g' ফরম্যাট স্পেসিফায়ার ব্যবহার করে 'পূর্ণসংখ্যা' ভেরিয়েবলের মান প্রিন্ট করতে 'fmt' প্যাকেজ থেকে 'printf' ফাংশন ব্যবহার করি।
প্রত্যাশিতভাবে, গোলং-এ অন্তর্নিহিত টাইপ ঢালাই গ্রহণযোগ্য নয়। পূর্ববর্তী অন্তর্নিহিত টাইপ কাস্টিং নিম্নলিখিত ত্রুটি তৈরি করে:
উদাহরণ 3: গোলং এক্সপ্লিসিট টাইপ কাস্টিং
সুস্পষ্ট প্রকারের রূপান্তর আমাদেরকে সুস্পষ্টভাবে একটি অভিপ্রায় উল্লেখ করার সময় সামঞ্জস্যপূর্ণ প্রকারের মধ্যে মানগুলিকে নিরাপদে রূপান্তর করতে সক্ষম করে। এটি নিশ্চিত করে যে আমরা টাইপ রূপান্তর সম্পর্কে সচেতন এবং দুর্ঘটনাজনিত টাইপ ত্রুটিগুলি প্রতিরোধ করতে সহায়তা করে। নিম্নলিখিত স্পষ্ট কাস্টিং বিবেচনা করুন:
প্যাকেজ প্রধানআমদানি 'fmt'
ফাংশন প্রধান () {
ছিল floatVal float32 = 6 . 75
ছিল intVal int = int ( floatVal )
fmt . Printf ( 'ফ্লোট মান হল %g৷ \n ' , floatVal )
fmt . Printf ( 'পূর্ণসংখ্যার মান হল %d' , intVal )
}
এখানে, একটি 'floatVal' ভেরিয়েবল 'float32' টাইপ দিয়ে তৈরি করা হয়েছে এবং এটিকে '6.75' মান নির্ধারণ করা হয়েছে। তারপর, 'int' টাইপের সাথে একটি 'intVal' ভেরিয়েবল ঘোষণা করা হয়। intVal-এ floatVal-এর মান নির্ধারণ করতে, টাইপ রূপান্তর ব্যবহার করা হয়। floatVal কে একটি পূর্ণসংখ্যা মানতে রূপান্তর করতে, 'int' ফাংশনটি floatVal এর সাথে ইনপুট হিসাবে ব্যবহৃত হয়। এর পরে, “fmt.Printf(“ফ্লোট ভ্যালু হল %g\n”, floatVal)” %g ফর্ম্যাট স্পেসিফায়ার ব্যবহার করে floatVal-এর মান প্রিন্ট করে যা ফ্লোটিং-পয়েন্ট মানগুলি প্রিন্ট করার জন্য উপযুক্ত। যদিও “fmt.Printf(“Integer Value is %d”, intVal)” কোড লাইন %d ফরম্যাট স্পেসিফায়ার ব্যবহার করে intVal-এর মান প্রিন্ট করে যা পূর্ণসংখ্যার মান প্রিন্ট করার জন্য উপযুক্ত।
নিম্নলিখিত আউটপুট ফ্লোটভাল এবং intVal উভয়ের জন্যই মান তৈরি করে এটি কাস্ট করার পরে:
উদাহরণ 4: গড় পেতে গোলং টাইপ কাস্টিং
এরপরে, আমরা প্রদত্ত মানগুলি থেকে গড় নম্বর পেতে ঢালাই করি। চলুন নিচে দেওয়া সোর্স কোডের মধ্য দিয়ে যাওয়া যাক:
প্যাকেজ প্রধানআমদানি 'fmt'
ফাংশন প্রধান () {
ছিল মোট int = 900
ছিল আমার নম্বর int = বিশ
ছিল গড় float32
গড় = float32 ( মোট ) / float32 ( আমার নম্বর )
fmt . Printf ( 'গড় হল = %f \n ' , গড় )
}
এখানে, আমরা প্রাথমিকভাবে তিনটি ভেরিয়েবল ঘোষণা করি। 'টোটাল' হল একটি পূর্ণসংখ্যা ভেরিয়েবল যা 900 এর মান দিয়ে শুরু করা হয়। 'MyNumber' হল একটি পূর্ণসংখ্যা ভেরিয়েবল যা 20 এর মান দিয়ে শুরু করা হয়। গণনা করা গড় তারপর float32 'গড়' ভেরিয়েবলে সংরক্ষণ করা হয়। তারপরে গণনা চালানোর জন্য গড় সূত্র দেওয়া হয়। বিভাগটি একটি ফ্লোটিং-পয়েন্ট বিভাগ হিসাবে সম্পন্ন হয়েছে তা নিশ্চিত করার জন্য, টাইপ রূপান্তর ব্যবহার করে 'টোটাল' এবং 'মাই নম্বর' এর মানগুলিকে ফ্লোট32-এ রূপান্তরিত করা হয়েছে। গণনা করা গড় 'গড়' ভেরিয়েবলের জন্য নির্ধারিত হয়। অবশেষে, “%f\n” ফরম্যাট স্ট্রিং যা “printf” ফাংশনে ব্যবহৃত হয় তা নির্দিষ্ট করে যে একটি ফ্লোট মান প্রিন্ট করা উচিত, তার পরে একটি নতুন লাইন অক্ষর।
আগের কোডে টাইপ কাস্টিং বোঝানোর পরে গড় হিসাবে ফলাফল পাওয়া যায়:
উদাহরণ 5: গোলং ইন্টি এবং স্ট্রিং টাইপ কাস্টিং
উপরন্তু, Go Int এবং String প্রকারের মধ্যে কাস্টিং অফার করে। আমরা strconv প্যাকেজের ফাংশন ব্যবহার করে এটি সম্পন্ন করতে পারি।
প্যাকেজ প্রধানআমদানি (
'fmt'
'strconv'
)
ফাংশন প্রধান () {
ছিল str স্ট্রিং = '1999'
ভিতরে , _ := strconv . লতা ( s )
fmt . Println ( ভিতরে )
ছিল পূর্ণসংখ্যা int = 1999
toStr := strconv . নিমজ্জিত ( পূর্ণসংখ্যা )
fmt . Println ( toStr )
}
এখানে দুটি ভেরিয়েবলের ঘোষণা দিয়ে শুরু হওয়া কোড। 'str' হল একটি স্ট্রিং ভেরিয়েবল যা '1999' এর মান দিয়ে আরম্ভ করা হয় এবং 'পূর্ণসংখ্যা' একটি পূর্ণসংখ্যা ভেরিয়েবল যা '1999' এর মান দিয়ে শুরু করা হয়। এর পরে, 'strconv.Atoi()' ফাংশনটি 'str' স্ট্রিংকে একটি পূর্ণসংখ্যা মানতে রূপান্তর করতে ব্যবহৃত হয়। 'v' এর প্রত্যাবর্তিত মান রূপান্তরিত পূর্ণসংখ্যার প্রতিনিধিত্ব করে, এবং ফাঁকা '_' সনাক্তকারীটি Atoi() দ্বারা প্রত্যাবর্তিত সম্ভাব্য ত্রুটি উপেক্ষা করতে ব্যবহৃত হয়।
এর পরে, strconv.Itoa() ফাংশনটি পূর্ণসংখ্যাকে একটি স্ট্রিং মানতে রূপান্তর করতে নিযুক্ত করা হয়। প্রত্যাবর্তিত মান যা 'toStr' রূপান্তরিত স্ট্রিং প্রতিনিধিত্ব করে।
আউটপুট '1999' স্ট্রিং থেকে একটি পূর্ণসংখ্যাতে রূপান্তর প্রদর্শন করে এবং একটি স্ট্রিংয়ে ফিরে যা '1999' এর আসল মান তৈরি করে:
উদাহরণ 6: স্ট্রিং এবং বাইটের মধ্যে গোলং টাইপ কাস্টিং
তদুপরি, Go-তে কাস্টিং স্ট্রিং এবং বাইট প্রকারেও সঞ্চালিত হতে পারে। নিম্নলিখিত কোডগুলি স্ট্রিং এবং বাইট স্লাইসের মধ্যে রূপান্তর প্রদর্শন করে:
প্যাকেজ প্রধানআমদানি (
'fmt'
)
ফাংশন প্রধান () {
ছিল mystr স্ট্রিং = 'এই যে'
ছিল b1 [] বাইট = [] বাইট ( myStr )
fmt . Println ( b1 )
স্ট্রিং := স্ট্রিং ( b1 )
fmt . Println ( স্ট্রিং )
}
এখানে, ভেরিয়েবলগুলিকে প্রথমে 'myStr' এবং 'b1' হিসাবে ঘোষণা করা হয় যা নির্দিষ্ট মান দিয়ে শুরু করা হয়। তারপর, []byte(myStr) এক্সপ্রেশন টাইপ রূপান্তর ব্যবহার করে 'myStr' স্ট্রিংকে একটি বাইট স্লাইসে রূপান্তর করে। এটি 'b1' ভেরিয়েবলের ফলে বাইট স্লাইস বরাদ্দ করে। এর পরে, 'স্ট্রিং(b1)' এক্সপ্রেশনটি টাইপ কনভার্সন ব্যবহার করে বাইট স্লাইস b1 কে আবার একটি স্ট্রিংয়ে রূপান্তর করে। এটি 'toString' ভেরিয়েবলের ফলে স্ট্রিং নির্ধারণ করে।
আউটপুট 'Hey there' স্ট্রিং এবং এর সংশ্লিষ্ট বাইট স্লাইস উপস্থাপনার মধ্যে রূপান্তর দেখায়:
উদাহরণ 7: স্কোয়ার রুট পেতে গোলং টাইপ কাস্টিং
এখন, আমরা বর্গমূল ফলাফল খুঁজে পেতে Go-তে কাস্টিং করি। কোডটি নিম্নরূপ স্থাপন করা হয়েছে:
প্যাকেজ প্রধানআমদানি (
'fmt'
'গণিত'
)
ফাংশন প্রধান () {
ছিল n int = 177
ছিল SqrtN float64
SqrtN = গণিত . Sqrt ( float64 ( n ))
fmt . Printf ( '%d এর বর্গমূল হল %.2f৷ \n ' , n , SqrtN )
}
এখানে, 'n' ভেরিয়েবলটিকে int হিসাবে ঘোষণা করা হয়েছে এবং '144' এর মান নির্ধারণ করা হয়েছে। 'SqrtN' ভেরিয়েবলটিকে একটি float64 হিসাবে ঘোষণা করা হয় এবং 'n' এর গণনাকৃত বর্গমূল সঞ্চয় করে। তারপর, math.Sqrt() ফাংশনটি 'n' এর বর্গমূল গণনা করার জন্য স্থাপন করা হয়। যেহেতু math.Sqrt() একটি float64 আর্গুমেন্ট আশা করে, এবং 'n' এর মান float64(n) ব্যবহার করে float64 এ রূপান্তরিত হয়। এর পরে, '%d এর বর্গমূল হল %.2f\n' ফরম্যাট স্ট্রিং কল 'printf' ফাংশনে যা একটি পূর্ণসংখ্যা মান (%d) এবং একটি ফ্লোটিং-পয়েন্ট মান (%.2f) নির্দিষ্ট করে। '%.2f'-এ '.2' নির্ভুলতা স্পেসিফায়ার নিশ্চিত করে যে বর্গমূল দুটি দশমিক স্থানের সাথে প্রিন্ট করা হয়েছে।
নিম্নলিখিত আউটপুটটি আনা হয়েছে যা প্রদত্ত মানের বর্গমূল নির্দেশ করে:
উপসংহার
Go-তে কাস্টিং নিয়ে আলোচনা করা হয়েছে স্বতন্ত্র উদাহরণের সাথে যা সবই এক্সিকিউটেবল। মনে রাখবেন যে Go-তে, টাইপকাস্টিং সুস্পষ্ট যা শক্তিশালী টাইপিং প্রয়োগ করে এবং কোড স্পষ্টতা এবং নির্ভরযোগ্যতা প্রচার করে।