ডেটা টাইপস এবং ভেরিয়েবলস (Data Types and Variables in Go)
Go ভাষায় ডেটা টাইপ এবং ভেরিয়েবল ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ একটি বিষয়, কারণ সঠিক টাইপ ব্যবহারের মাধ্যমে প্রোগ্রামের কার্যকারিতা এবং পারফরম্যান্স বৃদ্ধি পায়। Go ভাষায় স্ট্যাটিক টাইপিং ব্যবহৃত হয়, অর্থাৎ ভেরিয়েবলের টাইপ শুরুতে নির্ধারণ করতে হয় এবং একবার সেট হয়ে গেলে তা পরিবর্তন করা যায় না।
এখানে আমরা Go-তে ব্যবহৃত বিভিন্ন ডেটা টাইপ এবং ভেরিয়েবল নিয়ে আলোচনা করব।
১. ভেরিয়েবল (Variables)
Go-তে ভেরিয়েবল ডিক্লেয়ার করার জন্য var কিওয়ার্ড ব্যবহার করা হয়, এবং স্বয়ংক্রিয় টাইপ নির্ধারণের জন্য := অপারেটর ব্যবহৃত হয়।
১.১ ভেরিয়েবল ডিক্লেয়ারেশন
ভেরিয়েবল ডিক্লেয়ার করার সাধারণ সিনট্যাক্স:
var variableName type = valueউদাহরণ:
var age int = 25
var name string = "John"এখানে, age নামক ভেরিয়েবলটি একটি পূর্ণসংখ্যা (integer) এবং name একটি স্ট্রিং (string) টাইপের ভেরিয়েবল।
১.২ স্বয়ংক্রিয় টাইপ নির্ধারণ
Go-তে স্বয়ংক্রিয় টাইপ নির্ধারণের জন্য := ব্যবহার করা হয়, যা টাইপটি ডেভেলপারকে উল্লেখ করতে হয় না।
age := 25
name := "John"২. ডেটা টাইপস (Data Types)
Go-তে বিভিন্ন ধরনের ডেটা টাইপ রয়েছে, যা মূলত দুটি প্রধান বিভাগে ভাগ করা যায়:
- ভ্যালু টাইপ (Value Types)
- রেফারেন্স টাইপ (Reference Types)
২.১ ভ্যালু টাইপ (Value Types)
ভ্যালু টাইপগুলি হল টাইপগুলি, যেগুলি ভেরিয়েবলগুলির মান সংরক্ষণ করে এবং যখন একটি ভেরিয়েবল অন্য একটি ভেরিয়েবলে কপি করা হয়, তখন মূল ভেরিয়েবলটির মান পরিবর্তিত হয় না। কিছু উদাহরণ:
- int: পূর্ণসংখ্যা টাইপ।
- float32, float64: দশমিক সংখ্যা।
- bool: সত্য বা মিথ্যা মান।
- string: অক্ষরের সিকোয়েন্স।
- array: একটি ফিক্সড সাইজের সিকোয়েন্স।
উদাহরণ:
var age int = 25 // int
var height float64 = 5.9 // float64
var isActive bool = true // bool
var name string = "John" // string২.২ রেফারেন্স টাইপ (Reference Types)
রেফারেন্স টাইপগুলি হল টাইপগুলি, যেগুলি মূল ভেরিয়েবলটির মান সংরক্ষণের পরিবর্তে তার রেফারেন্স (অথবা অবস্থান) সংরক্ষণ করে। এর মানে হলো, যদি একটি ভেরিয়েবল অন্য ভেরিয়েবলকে রেফার করে, তবে একটি ভেরিয়েবলের মান পরিবর্তন করলে অন্য ভেরিয়েবলের মানও পরিবর্তিত হয়।
- slice: একটি ডাইনামিক অ্যারে।
- map: একটি কী-ভ্যালু পেয়ার।
- channel: গোরাউটিনগুলির মধ্যে ডেটা আদান-প্রদান করতে ব্যবহৃত হয়।
- pointer: একটি ভেরিয়েবলের মেমরি অবস্থান।
উদাহরণ:
var fruits []string = []string{"Apple", "Banana", "Cherry"} // slice
var person map[string]string = map[string]string{"name": "John", "city": "New York"} // map৩. পৌনঃপুনিক ডেটা টাইপস (Primitive Data Types)
Go-তে কিছু মৌলিক বা পৌনঃপুনিক ডেটা টাইপ রয়েছে, যা প্রোগ্রামিংয়ের বিভিন্ন জায়গায় ব্যবহৃত হয়:
৩.১ ইন্টিজার (Integers)
- int8, int16, int32, int64: নির্দিষ্ট আকারের পূর্ণসংখ্যা।
- int: প্ল্যাটফর্ম নির্ভর পূর্ণসংখ্যা (32-বিট বা 64-বিট)।
- uint8, uint16, uint32, uint64: সাইনবিহীন পূর্ণসংখ্যা।
উদাহরণ:
var a int = 10
var b int64 = 100000
var c uint = 20৩.২ ফ্লোটিং পয়েন্ট (Floating Point)
- float32, float64: দশমিক সংখ্যা।
উদাহরণ:
var pi float64 = 3.14159
var temperature float32 = 36.6৩.৩ বুলিয়ান (Boolean)
bool টাইপ দুটি মান নিতে পারে: true বা false।
উদাহরণ:
var isActive bool = true৩.৪ স্ট্রিং (String)
string টাইপের ভেরিয়েবল একটি সিকোয়েন্সের চরিত্র ধারণ করে।
উদাহরণ:
var greeting string = "Hello, Go!"৪. পয়েন্টার (Pointers)
Go-তে পয়েন্টার একটি বিশেষ ডেটা টাইপ, যা অন্য ভেরিয়েবলের মেমরি ঠিকানা ধারণ করে। এর মাধ্যমে আপনি ভেরিয়েবলের মানের পরিবর্তন করতে পারেন, যা রেফারেন্স টাইপে ব্যবহৃত হয়।
সিনট্যাক্স:
var ptr *int
var x int = 58
ptr = &xএখানে, &x মানে x এর মেমরি ঠিকানা এবং ptr সেই ঠিকানা ধারণ করছে।
৫. টাইপ কনভার্সন (Type Conversion)
Go-তে এক ধরনের ডেটা টাইপকে অন্য ধরনের ডেটা টাইপে কনভার্ট করতে হয়, এবং এটি type কিওয়ার্ড দিয়ে করা হয়।
উদাহরণ:
var a int = 10
var b float64 = float64(a) // int থেকে float64 তে কনভার্ট৬. কনস্ট্যান্ট (Constants)
Go-তে কনস্ট্যান্ট ডিক্লেয়ার করতে const কিওয়ার্ড ব্যবহার করা হয়। কনস্ট্যান্টের মান একবার সেট করার পর তা পরিবর্তন করা যায় না।
উদাহরণ:
const Pi = 3.14159
const MaxValue = 100সারসংক্ষেপ
Go-তে ডেটা টাইপ এবং ভেরিয়েবল ব্যবস্থাপনা সোজা এবং পরিষ্কার। এটি স্ট্যাটিক টাইপিং ব্যবহার করে, যার ফলে টাইপ নির্ধারণের সময় ভুল কম হয় এবং প্রোগ্রামের কার্যকারিতা বৃদ্ধি পায়। Go-তে বিভিন্ন প্রকারের ভেরিয়েবল, ডেটা টাইপ (যেমন, পূর্ণসংখ্যা, দশমিক সংখ্যা, বুলিয়ান, স্ট্রিং, পয়েন্টার, স্লাইস, ম্যাপ ইত্যাদি) এবং কনস্ট্যান্ট ব্যবহার করা যায়। টাইপ কনভার্সন এবং পয়েন্টার ব্যবহারের মাধ্যমে প্রোগ্রাম আরও নমনীয় ও কার্যকরী হয়।
প্রিমিটিভ ডেটা টাইপস: int, float, bool, string
Go প্রোগ্রামিং ভাষায় কিছু সাধারণ প্রিমিটিভ ডেটা টাইপ রয়েছে, যেগুলো প্রতিটি প্রোগ্রামে ব্যবহৃত হয়। এসব টাইপ মূলত একটি নির্দিষ্ট ধরনের ডেটা সংরক্ষণ করার জন্য ব্যবহৃত হয়। নিচে Go এর প্রধান প্রিমিটিভ ডেটা টাইপস — int, float, bool, এবং string — সম্পর্কে বিস্তারিত আলোচনা করা হলো।
১. int (ইন্টিজার)
int হল একটি পূর্ণসংখ্যা ডেটা টাইপ যা পূর্ণসংখ্যা (negative, zero, positive) মান ধারণ করতে পারে। Go তে int টাইপের সাইজ সিস্টেমের আর্কিটেকচারের উপর নির্ভর করে (32-bit বা 64-bit)। সাধারণভাবে, এটি মেমরির সাইজ অনুসারে ৪ বা ৮ বাইট সাইজে হতে পারে।
উদাহরণ:
package main
import "fmt"
func main() {
var x int = 10
var y int = -20
fmt.Println(x)
fmt.Println(y)
}আউটপুট:
10
-20উল্লেখযোগ্য বিষয়:
intটাইপের মান সাধারণত ছোট বা বড় পূর্ণসংখ্যা হতে পারে।intএর সাইজ কিপর্যন্ত যাবে, তা নির্ভর করে সিস্টেমের আর্কিটেকচারের উপর।
২. float (ফ্লোট)
float টাইপটি দশমিক সংখ্যাগুলিকে (অর্থাৎ ভাসমান-পয়েন্ট সংখ্যা) ধারণ করার জন্য ব্যবহৃত হয়। Go তে দুটি ফ্লোট টাইপ রয়েছে: float32 এবং float64। সাধারণত float64 ব্যবহার করা হয়, কারণ এটি বৃহত্তর ডেসিমাল মান সংরক্ষণ করতে সক্ষম।
উদাহরণ:
package main
import "fmt"
func main() {
var x float32 = 3.14
var y float64 = 3.14159265359
fmt.Println(x)
fmt.Println(y)
}আউটপুট:
3.14
3.14159265359উল্লেখযোগ্য বিষয়:
float32এবংfloat64এর মধ্যে পার্থক্য হলfloat64বেশি সঠিকতা (precision) প্রদান করে।- সাধারণত যখন বড় দশমিক সংখ্যা নিয়ে কাজ করতে হয়, তখন
float64ব্যবহার করা হয়।
৩. bool (বুলিয়ান)
bool টাইপ দুটি মান ধারণ করতে পারে: true বা false। এটি লজিক্যাল অপারেশন বা শর্তমূলক পরীক্ষা (conditional checking) করতে ব্যবহৃত হয়।
উদাহরণ:
package main
import "fmt"
func main() {
var x bool = true
var y bool = false
fmt.Println(x)
fmt.Println(y)
}আউটপুট:
true
falseউল্লেখযোগ্য বিষয়:
boolসাধারণত শর্ত মূল্যায়ন বা লজিক্যাল অপারেশন যেমন AND, OR, NOT ইত্যাদির জন্য ব্যবহৃত হয়।
৪. string (স্ট্রিং)
string টাইপটি টেক্সট বা ক্যারেক্টার এর সিরিজ সংরক্ষণ করে। Go-তে একটি স্ট্রিং অক্ষরগুলো (characters) সিকোয়েন্স হিসেবে থাকে এবং সাধারণত ইউনিকোড মান (Unicode) ব্যবহার করে। স্ট্রিং সাধারণত দুইটি ডাবল কোটেশন চিহ্নের মধ্যে লেখা হয়।
উদাহরণ:
package main
import "fmt"
func main() {
var str string = "Hello, Go!"
fmt.Println(str)
}আউটপুট:
Hello, Go!উল্লেখযোগ্য বিষয়:
stringটাইপের মান সাধারণত একটি চরিত্রের অ্যারে, যা টেক্সট বা অন্য কোন অক্ষর গ্রুপের তথ্য ধারণ করতে ব্যবহৃত হয়।stringঅপরিবর্তনীয় (immutable) হয়, অর্থাৎ একবার সেট করার পর স্ট্রিংয়ের মান পরিবর্তন করা সম্ভব নয়। তবে নতুন স্ট্রিং তৈরি করা যায়।
সারসংক্ষেপ
Go তে ব্যবহৃত কিছু প্রিমিটিভ ডেটা টাইপস:
int: পূর্ণসংখ্যা সংরক্ষণের জন্য ব্যবহৃত হয়।float: দশমিক সংখ্যা সংরক্ষণের জন্য ব্যবহৃত হয়, যেমনfloat32এবংfloat64।bool:trueঅথবাfalseমান ধারণ করে, যা লজিক্যাল পরীক্ষা বা শর্তমূলক মূল্যায়ন করার জন্য ব্যবহৃত হয়।string: টেক্সট বা চরিত্রের সিরিজ সংরক্ষণ করে, যা সাধারণত টেক্সট বা ইনপুট ডেটা ধারণ করতে ব্যবহৃত হয়।
এই প্রিমিটিভ টাইপগুলি Go প্রোগ্রামিং ভাষায় সাধারণত ব্যবহৃত হয় এবং এগুলোর মাধ্যমে বিভিন্ন ধরনের ডেটা ম্যানিপুলেশন করা সম্ভব।
Composite ডেটা টাইপস: Arrays, Slices, Maps, Structs
Go প্রোগ্রামিং ভাষায় Composite ডেটা টাইপস হল সেই ধরনের ডেটা টাইপস যা এক বা একাধিক ভ্যালু ধারণ করতে সক্ষম। এই ডেটা টাইপগুলি ব্যবহারকারীকে একাধিক ডেটা একসাথে স্টোর এবং পরিচালনা করার সুযোগ দেয়। Go-তে চারটি প্রধান Composite ডেটা টাইপ হল: Arrays, Slices, Maps, এবং Structs। চলুন, একে একে এসব সম্পর্কে জানি।
১. Arrays (অ্যারে)
Arrays হল একটি ফিক্সড সাইজের ডেটা টাইপ, যা একই ধরনের একাধিক উপাদান ধারণ করতে পারে। একবার অ্যারে তৈরি হলে, তার আকার (size) পরিবর্তন করা যায় না।
উদাহরণ:
var arr [5]int // একটি ইনটিজার অ্যারে যা ৫টি উপাদান ধারণ করতে পারে
arr[0] = 10 // প্রথম উপাদানে ১০ অ্যাসাইন করা হচ্ছে
arr[1] = 20 // দ্বিতীয় উপাদানে ২০ অ্যাসাইন করা হচ্ছে
fmt.Println(arr) // আউটপুট: [10 20 0 0 0]বৈশিষ্ট্য:
- ফিক্সড আকার: অ্যারে তৈরি করার সময় আকার নির্ধারণ করতে হয়।
- একই ধরনের ডেটা: সমস্ত উপাদান এক ধরনের হতে হবে (যেমন: সব ইনটিজার, সব স্ট্রিং ইত্যাদি)।
অ্যারে ব্যবহার করা হয় যখন:
- আপনি জানেন যে ডেটার সংখ্যা পূর্বনির্ধারিত এবং স্থির থাকবে।
২. Slices (স্লাইস)
Slices হল একটি ডাইনামিক ডেটা টাইপ, যা অ্যারের মতো একই ধরনের ডেটা ধারণ করতে পারে তবে এর আকার পরিবর্তনযোগ্য। স্লাইস মূলত অ্যারের একটি ভিউ (view), এবং এটি অ্যারের উপাদানগুলির একটি সাবসেট হতে পারে।
উদাহরণ:
arr := []int{10, 20, 30, 40, 50} // স্লাইস তৈরি
fmt.Println(arr) // আউটপুট: [10 20 30 40 50]
arr = append(arr, 60) // নতুন উপাদান অ্যাড করা
fmt.Println(arr) // আউটপুট: [10 20 30 40 50 60]বৈশিষ্ট্য:
- ডাইনামিক আকার: স্লাইসের আকার runtime এ পরিবর্তন করা যায় (যেমন
append()ব্যবহার করে নতুন উপাদান যুক্ত করা)। - অ্যারের উপর ভিত্তি করে: স্লাইস একটি অ্যারের সাবসেট হতে পারে।
- ক্যাপাসিটি: স্লাইসের ধারণক্ষমতা (capacity) এবং দৈর্ঘ্য (length) রয়েছে, যা runtime এ পরিবর্তন হয়।
স্লাইস ব্যবহার করা হয় যখন:
- ডেটার আকার পরিবর্তনশীল এবং আপনি ডেটা বাড়ানো বা কমানোর প্রয়োজন।
৩. Maps (ম্যাপস)
Maps হল একটি ডেটা টাইপ যা কিজ (key) এবং ভ্যালু (value) জোড়া ধারণ করে। এটি একটি ডিকশনারির মতো কাজ করে যেখানে প্রতিটি কিজের সাথে একটি নির্দিষ্ট ভ্যালু যুক্ত থাকে। Go-তে ম্যাপগুলি unordered থাকে, অর্থাৎ কিজ এবং ভ্যালুর স্থান কোনো নির্দিষ্ট নিয়মে সাজানো থাকে না।
উদাহরণ:
studentGrades := make(map[string]int) // একটি ম্যাপ তৈরি করা (কিজ স্ট্রিং, ভ্যালু ইনটিজার)
studentGrades["Alice"] = 90 // Alice এর জন্য গ্রেড অ্যাসাইন করা
studentGrades["Bob"] = 80 // Bob এর জন্য গ্রেড অ্যাসাইন করা
fmt.Println(studentGrades) // আউটপুট: map[Alice:90 Bob:80]বৈশিষ্ট্য:
- ডাইনামিক: ম্যাপের সাইজ runtime এ পরিবর্তিত হয়।
- অর্ডার নেই: ম্যাপের উপাদান কোন নির্দিষ্ট ক্রমে সাজানো থাকে না।
- কিজ এবং ভ্যালু: প্রতিটি ম্যাপের উপাদান কিজ এবং ভ্যালুর জোড়া হয়।
ম্যাপ ব্যবহার করা হয় যখন:
- ডেটার জন্য দ্রুত অ্যাক্সেস প্রয়োজন, এবং প্রতিটি ডেটা কিজ দ্বারা চিহ্নিত।
৪. Structs (স্ট্রাক্টস)
Structs হল একটি কাস্টম ডেটা টাইপ যা এক বা একাধিক ডেটা টাইপের ফিল্ড ধারণ করতে পারে। এটি একই বা বিভিন্ন ধরনের ডেটা একত্রে গ্রুপ করে একটি নতুন ডেটা টাইপ তৈরি করতে সাহায্য করে। স্ট্রাক্ট একটি অবজেক্ট বা রেকর্ডের মতো কাজ করে।
উদাহরণ:
type Person struct {
Name string
Age int
Address string
}
p := Person{"John Doe", 30, "123 Main St"}
fmt.Println(p.Name) // আউটপুট: John Doe
fmt.Println(p.Age) // আউটপুট: 30
fmt.Println(p.Address) // আউটপুট: 123 Main Stবৈশিষ্ট্য:
- একাধিক ডেটা টাইপের সমন্বয়: স্ট্রাক্ট বিভিন্ন ধরনের ডেটা ধারণ করতে পারে, যেমন স্ট্রিং, ইনটিজার, ফ্লোট ইত্যাদি।
- কাস্টম ডেটা টাইপ: এটি আপনার নিজের ডেটা টাইপ তৈরি করতে সহায়ক।
স্ট্রাক্ট ব্যবহার করা হয় যখন:
- একত্রে সম্পর্কিত বিভিন্ন ডেটাকে এক জায়গায় গ্রুপ করতে হয়, যেমন একজন ব্যক্তি (নাম, বয়স, ঠিকানা)।
সারসংক্ষেপ
| ডেটা টাইপ | বৈশিষ্ট্য | ব্যবহার |
|---|---|---|
| Arrays | ফিক্সড সাইজের, একই ধরনের ডেটা ধারণ করতে পারে। | পূর্বনির্ধারিত আকারের ডেটা ধারণ করতে। |
| Slices | ডাইনামিক সাইজ, অ্যারের সাবসেট হিসেবে কাজ করে। | ডেটার আকার পরিবর্তনশীল হলে। |
| Maps | কিজ-ভ্যালু পেয়ার ধারণ করে, unordered। | দ্রুত ডেটা অ্যাক্সেস প্রয়োজন হলে। |
| Structs | একাধিক ধরনের ডেটাকে গ্রুপ করে, কাস্টম ডেটা টাইপ তৈরি করে। | সম্পর্কিত ডেটা একত্রে স্টোর করতে (যেমন ব্যক্তি, বই ইত্যাদি)। |
এই Composite ডেটা টাইপগুলো ব্যবহার করে আপনি আপনার প্রোগ্রামে জটিল ডেটা মডেল তৈরি করতে পারেন এবং সেগুলোর উপর বিভিন্ন অপারেশন সম্পাদন করতে পারবেন।
ভেরিয়েবল ডিক্লারেশন এবং Initialization (Variable Declaration and Initialization) in Go
Go প্রোগ্রামিং ভাষায় ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন একটি গুরুত্বপূর্ণ বিষয়। এখানে আমরা শিখব কিভাবে ভেরিয়েবল ডিক্লেয়ার করা হয় এবং তাদের ইনিশিয়ালাইজ করা হয়।
১. ভেরিয়েবল ডিক্লারেশন (Variable Declaration)
Go-তে ভেরিয়েবল ডিক্লারেশন এর জন্য var কীওয়ার্ড ব্যবহার করা হয়। এর মাধ্যমে আপনি একটি নতুন ভেরিয়েবল তৈরি করতে পারেন এবং তার ধরন নির্ধারণ করতে পারেন।
১.১ ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন
Go-তে ভেরিয়েবল ডিক্লার করার সময় আপনি সেটি ইনিশিয়ালাইজ করতে পারেন, অর্থাৎ তার জন্য প্রাথমিক মান নির্ধারণ করতে পারেন।
var age int = 25 // ভেরিয়েবল age ডিক্লেয়ার করা এবং ইনিশিয়ালাইজ করা
fmt.Println(age) // আউটপুট: 25১.২ ভেরিয়েবল ডিক্লারেশন শুধুমাত্র
যদি আপনি শুধু ভেরিয়েবল ডিক্লেয়ার করতে চান এবং পরে তার মান অ্যাসাইন করতে চান, তাহলে মান দেওয়া না-ও যেতে পারে। তবে Go-তে ডিফল্ট মানের সাহায্যে এটি ইনিশিয়ালাইজ হবে।
var age int
fmt.Println(age) // আউটপুট: 0, কারণ int টাইপের ডিফল্ট মান 0২. সংক্ষিপ্ত ভেরিয়েবল ডিক্লারেশন (Short Variable Declaration)
Go ভাষায় আপনি সহজভাবে এবং সংক্ষেপে ভেরিয়েবল ডিক্লেয়ার এবং ইনিশিয়ালাইজ করতে := অপারেটর ব্যবহার করতে পারেন। এটি var কীওয়ার্ডের বিকল্প হিসেবে ব্যবহৃত হয় এবং এটি সাধারণত ফাংশনের মধ্যে ব্যবহৃত হয়।
২.১ সংক্ষিপ্ত ভেরিয়েবল ডিক্লারেশন
name := "John" // name ভেরিয়েবলটি ইনিশিয়ালাইজ হবে "John" দিয়ে
fmt.Println(name) // আউটপুট: Johnএখানে := ব্যবহার করে name ভেরিয়েবলটি স্ট্রিং টাইপ হিসেবে ডিক্লেয়ার করা হয়েছে এবং ইনিশিয়ালাইজ করা হয়েছে "John" মান দিয়ে।
২.২ একাধিক ভেরিয়েবল ডিক্লারেশন
সংক্ষিপ্ত ভেরিয়েবল ডিক্লারেশন ব্যবহার করে একাধিক ভেরিয়েবলও ডিক্লেয়ার করা যেতে পারে।
x, y := 10, 20 // একাধিক ভেরিয়েবল ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা
fmt.Println(x, y) // আউটপুট: 10 20৩. ভেরিয়েবল টাইপ (Variable Types)
Go একটি স্ট্যাটিক টাইপিং ভাষা, অর্থাৎ ভেরিয়েবলটি কোন ধরনের ডেটা ধারণ করবে তা আগে থেকে নির্ধারণ করতে হয়। আপনি ভেরিয়েবল ডিক্লারেশনে তার টাইপ উল্লেখ করতে পারেন, যেমন int, float64, string, ইত্যাদি।
৩.১ টাইপ সহ ভেরিয়েবল ডিক্লারেশন
var num int = 42 // num ভেরিয়েবলটি একটি int টাইপ ভেরিয়েবল
fmt.Println(num) // আউটপুট: 42৩.২ টাইপ ছাড়াই ভেরিয়েবল ডিক্লারেশন (যখন মান দেওয়া হয়)
Go স্বয়ংক্রিয়ভাবে ভেরিয়েবলের টাইপ বুঝতে পারে যদি আপনি তা ইনিশিয়ালাইজ করেন।
var name = "Alice" // এখানে টাইপ string স্বয়ংক্রিয়ভাবে ডিডাক্ট হবে
fmt.Println(name) // আউটপুট: Alice৩.৩ একাধিক ভেরিয়েবল ডিক্লারেশন
আপনি একই লাইনে একাধিক ভেরিয়েবলও ডিক্লেয়ার করতে পারেন। এতে ভেরিয়েবলগুলির ধরন একই হতে হবে যদি var ব্যবহার করেন।
var a, b, c int = 1, 2, 3
fmt.Println(a, b, c) // আউটপুট: 1 2 3আপনি যদি টাইপ নির্ধারণ না করেন, তবে Go স্বয়ংক্রিয়ভাবে টাইপ অনুমান করবে যদি মান দেওয়া থাকে।
var a, b, c = 1, 2, 3
fmt.Println(a, b, c) // আউটপুট: 1 2 3৪. ভেরিয়েবল ইনিশিয়ালাইজেশন (Variable Initialization)
ভেরিয়েবল ইনিশিয়ালাইজেশন হলো ভেরিয়েবলকে একটি মান দেওয়া, যা তার প্রথম মান হিসাবে কাজ করে। Go-তে ভেরিয়েবল ইনিশিয়ালাইজ করা দুটি উপায়ে হতে পারে:
৪.১ অবশ্যই ইনিশিয়ালাইজেশন (Required Initialization)
কোন ভেরিয়েবল ডিক্লেয়ার করার সময়, তাকে ইনিশিয়ালাইজ করতে হবে। যদি আপনি মান না দেন, তবে এটি ডিফল্ট মান নিবে। যেমন:
intডিফল্ট হবে0float64ডিফল্ট হবে0.0stringডিফল্ট হবে""(খালি স্ট্রিং)
var age int // age এর ডিফল্ট মান হবে 0
fmt.Println(age) // আউটপুট: 0৪.২ ডিফল্ট ইনিশিয়ালাইজেশন (Default Initialization)
Go-তে ভেরিয়েবল ডিক্লেয়ার না করে মান না দিলে, এটি স্বয়ংক্রিয়ভাবে ডিফল্ট মান গ্রহণ করবে।
var price float64 // ডিফল্ট মান হবে 0.0
fmt.Println(price) // আউটপুট: 0৫. গ্লোবাল এবং লোকাল ভেরিয়েবল ডিক্লারেশন
- গ্লোবাল ভেরিয়েবল: এই ভেরিয়েবলগুলি পুরো প্রোগ্রামে যে কোন স্থানে অ্যাক্সেস করা যায়।
- লোকাল ভেরিয়েবল: এই ভেরিয়েবলগুলি শুধুমাত্র নির্দিষ্ট ফাংশনের মধ্যে ব্যবহৃত হয়।
৫.১ গ্লোবাল ভেরিয়েবল
var globalVar = "I am global"
func main() {
fmt.Println(globalVar) // গ্লোবাল ভেরিয়েবল অ্যাক্সেস করা
}৫.২ লোকাল ভেরিয়েবল
func main() {
var localVar = "I am local"
fmt.Println(localVar) // লোকাল ভেরিয়েবল অ্যাক্সেস করা
}সারসংক্ষেপ
- ভেরিয়েবল ডিক্লারেশন: Go-তে
varএবং সংক্ষিপ্ত ডিক্লারেশন:=ব্যবহার করে ভেরিয়েবল ডিক্লেয়ার করা হয়। - ভেরিয়েবল ইনিশিয়ালাইজেশন: ভেরিয়েবল ইনিশিয়ালাইজেশন মান দিয়ে শুরু করা হয়। Go ভাষায় ভেরিয়েবলগুলো ডিফল্ট মান নেয় যদি মান না দেওয়া হয়।
- একাধিক ভেরিয়েবল ডিক্লারেশন: একসাথে একাধিক ভেরিয়েবল ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা যায়।
এগুলো Go ভাষায় ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন নিয়ে মৌলিক ধারণা প্রদান করে, যা আপনার প্রোগ্রামিং দক্ষতা উন্নত করতে সহায়ক হবে।
Go-তে Type Conversion এবং Type Inference
১. Type Conversion (টাইপ কনভার্সন)
Go প্রোগ্রামিং ভাষায় টাইপ কনভার্সন হলো এক ধরনের ডেটা টাইপ থেকে অন্য টাইপে পরিবর্তন। এটি তখন প্রয়োজন হয় যখন আপনি একটি টাইপের মান অন্য টাইপে ব্যবহার করতে চান, তবে Go ভাষা টাইপ সুরক্ষা বজায় রাখতে কঠোর নিয়ম অনুসরণ করে। তাই টাইপ কনভার্সন করতে হলে explicit (স্পষ্টভাবে) কনভার্সন করতে হয়।
১.১ টাইপ কনভার্সন সিনট্যাক্স
টাইপ কনভার্সন করতে, আপনি একটি নির্দিষ্ট টাইপের নামের আগে মানটি রেখেও কনভার্ট করতে পারেন। এর সিনট্যাক্স হলো:
newValue := typeName(originalValue)১.২ টাইপ কনভার্সন উদাহরণ
ধরা যাক, আপনার কাছে একটি float64 টাইপের মান আছে এবং আপনি সেটিকে int টাইপে কনভার্ট করতে চান:
package main
import "fmt"
func main() {
var x float64 = 3.14
var y int = int(x) // float64 থেকে int এ কনভার্সন
fmt.Println("float64 value:", x)
fmt.Println("int value:", y)
}এখানে x হল float64 টাইপ এবং আমরা এটিকে int টাইপে কনভার্ট করেছি। আউটপুট হবে:
float64 value: 3.14
int value: 3এতে দেখা যাচ্ছে যে, দশমিক অংশটি বাদ দিয়ে শুধু পূর্ণসংখ্যাটি রাখা হয়েছে।
১.৩ স্ট্রিং থেকে অন্য টাইপে কনভার্সন
Go-তে স্ট্রিং কনভার্সনও করা যায়, যেমন স্ট্রিং থেকে সংখ্যা বা ভিন্ন ডেটা টাইপে রূপান্তর:
package main
import (
"fmt"
"strconv"
)
func main() {
str := "123"
num, err := strconv.Atoi(str) // স্ট্রিং থেকে ইন্টে কনভার্ট করা
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Converted value:", num)
}
}এখানে strconv.Atoi ফাংশনটি স্ট্রিং "123" কে int টাইপে কনভার্ট করছে।
২. Type Inference (টাইপ ইনফারেন্স)
টাইপ ইনফারেন্স হলো যখন Go ডেভেলপারকে টাইপ নির্দিষ্ট করার প্রয়োজন পড়ে না, কারণ Go স্বয়ংক্রিয়ভাবে মান দেখে টাইপটি অনুমান (inference) করে। Go তে একটি ভেরিয়েবল ঘোষণার সময়, যখন টাইপ স্পষ্টভাবে উল্লেখ না করা হয়, তখন Go ভাষা সঠিক টাইপ নির্ধারণ করে।
Go ভাষায় ভেরিয়েবল ডিক্লারেশনে := ব্যবহার করার মাধ্যমে টাইপ ইনফারেন্স কার্যকর হয়, অর্থাৎ আপনি টাইপ উল্লেখ না করলেও Go তা স্বয়ংক্রিয়ভাবে নির্ধারণ করবে।
২.১ টাইপ ইনফারেন্স উদাহরণ
package main
import "fmt"
func main() {
x := 42 // এখানে টাইপ ইনফারেন্স দ্বারা Go x-এর টাইপ int নির্ধারণ করেছে
y := 3.14 // এখানে টাইপ ইনফারেন্স দ্বারা Go y-এর টাইপ float64 নির্ধারণ করেছে
fmt.Println(x, y)
}এখানে, আমরা x এবং y ভেরিয়েবল দুটি ডিক্লেয়ার করেছি, তবে টাইপ উল্লেখ করি নি। Go ভাষা x-কে int এবং y-কে float64 টাইপ হিসাবে ইনফারেন্স করেছে।
২.২ টাইপ ইনফারেন্সের সুবিধা
টাইপ ইনফারেন্সের ফলে কোড কমপ্লেক্সিটি কমে যায় এবং কোড লেখা সহজ হয়। এই সুবিধাটি প্রোগ্রামিং দ্রুততর করে, কারণ টাইপ উল্লেখ করার প্রয়োজন হয় না।
২.৩ টাইপ স্পষ্টীকরণ
যদি আপনি টাইপ স্পষ্টভাবে উল্লেখ করতে চান, তবে var কিওয়ার্ড ব্যবহার করে টাইপ নির্দিষ্ট করা যেতে পারে:
package main
import "fmt"
func main() {
var x int = 42 // টাইপ স্পষ্টভাবে উল্লেখ করা হয়েছে
var y float64 = 3.14
fmt.Println(x, y)
}এখানে, x এবং y টাইপ স্পষ্টভাবে int এবং float64 উল্লেখ করা হয়েছে, তবে := ব্যবহার করলে Go সেগুলি ইনফারেন্স করে নিবে।
সারসংক্ষেপ
- Type Conversion (টাইপ কনভার্সন): Go-তে টাইপ কনভার্সন করতে হলে এক টাইপ থেকে অন্য টাইপে পরিবর্তন করতে হয়, যা explicit কনভার্সন দিয়ে করা হয়। যেমন,
float64থেকেintকনভার্ট করা। - Type Inference (টাইপ ইনফারেন্স): Go তে ভেরিয়েবল ডিক্লেয়ার করার সময় যদি টাইপ স্পষ্টভাবে উল্লেখ না করা হয়, তবে Go নিজেই টাইপ নির্ধারণ করে। এটি কোডকে আরও সহজ ও পরিষ্কার করে তোলে।
Go তে টাইপ কনভার্সন এবং টাইপ ইনফারেন্সের সুবিধা কোড লেখার সময় আরও দ্রুত এবং কার্যকরী সিদ্ধান্ত নিতে সাহায্য করে।
Read more