Go-তে Structs এর ধারণা এবং এর প্রয়োগ
১. Structs কি?
Struct হলো Go প্রোগ্রামিং ভাষায় একটি কাস্টম ডেটা টাইপ, যা একাধিক ভিন্ন ধরনের ডেটা আইটেম (ফিল্ড) ধারণ করতে সক্ষম। এটি একটি গ্রুপিং কনসেপ্ট যেখানে আপনি সম্পর্কিত ডেটা একত্রিত করে একটি অবজেক্টের মতো তৈরি করতে পারেন। Struct-এ থাকা প্রতিটি ফিল্ডের আলাদা নাম এবং টাইপ থাকে। এটি মূলত ডেটার গ্রুপিং বা ডেটা মডেলিং এর জন্য ব্যবহৃত হয়।
Struct সাধারণত এমন পরিস্থিতিতে ব্যবহার করা হয় যেখানে একাধিক ডেটা আইটেমের সংমিশ্রণ প্রয়োজন হয়, এবং আপনি সেই ডেটা আইটেমগুলির ওপর অপারেশন বা ফাংশন পরিচালনা করতে চান।
২. Struct এর ডিক্লারেশন
Go তে struct ডিক্লেয়ার করতে type কিওয়ার্ড ব্যবহার করা হয়। এর সাধারণ সিনট্যাক্স:
type StructName struct {
FieldName1 FieldType1
FieldName2 FieldType2
// আরও ফিল্ড থাকতে পারে
}এখানে:
StructName: struct এর নামFieldName: struct এর প্রতিটি ফিল্ডের নামFieldType: প্রতিটি ফিল্ডের টাইপ
২.১ Struct ডিক্লারেশন উদাহরণ
package main
import "fmt"
// Struct ডিক্লেয়ার করা
type Person struct {
Name string
Age int
Height float64
}
func main() {
// Struct এর ইনস্ট্যান্স তৈরি
person1 := Person{
Name: "John Doe",
Age: 30,
Height: 5.9,
}
// Struct এর ফিল্ড অ্যাক্সেস করা
fmt.Println(person1) // আউটপুট: {John Doe 30 5.9}
}এখানে, Person একটি struct, যা Name, Age, এবং Height নামে তিনটি ফিল্ড ধারণ করে। person1 নামে একটি struct ইনস্ট্যান্স তৈরি করা হয়েছে এবং এর মান সেট করা হয়েছে।
৩. Struct এর ফিল্ড অ্যাক্সেস এবং ম্যানিপুলেশন
Struct এর ফিল্ডগুলোতে অ্যাক্সেস করতে dot (.) অপারেটর ব্যবহার করা হয়। আপনি struct এর মান পরিবর্তন করতে বা ফিল্ডের মান অ্যাক্সেস করতে এই অপারেটরটি ব্যবহার করবেন।
৩.১ Struct ফিল্ড অ্যাক্সেস
package main
import "fmt"
type Person struct {
Name string
Age int
Height float64
}
func main() {
person1 := Person{Name: "Alice", Age: 25, Height: 5.5}
// Struct ফিল্ড অ্যাক্সেস
fmt.Println("Name:", person1.Name) // আউটপুট: Name: Alice
fmt.Println("Age:", person1.Age) // আউটপুট: Age: 25
fmt.Println("Height:", person1.Height) // আউটপুট: Height: 5.5
}এখানে, person1.Name, person1.Age, এবং person1.Height দিয়ে person1 struct এর ফিল্ডগুলো অ্যাক্সেস করা হয়েছে।
৩.২ Struct ফিল্ড পরিবর্তন
package main
import "fmt"
type Person struct {
Name string
Age int
Height float64
}
func main() {
person1 := Person{Name: "Alice", Age: 25, Height: 5.5}
// Struct ফিল্ড পরিবর্তন
person1.Age = 26
person1.Height = 5.6
fmt.Println(person1) // আউটপুট: {Alice 26 5.6}
}এখানে, person1.Age এবং person1.Height ফিল্ডগুলির মান পরিবর্তন করা হয়েছে।
৪. Struct পয়েন্টার (Pointers to Structs)
যেহেতু structs হলো বড় ডেটা স্ট্রাকচার, তাই এগুলোর পয়েন্টার ব্যবহার করা হয় যাতে মেমরি কম ব্যবহার করা যায়। Struct এর পয়েন্টার মাধ্যমে আমরা struct এর মানকে পরিবর্তন করতে পারি।
৪.১ Struct পয়েন্টার ব্যবহার
package main
import "fmt"
type Person struct {
Name string
Age int
Height float64
}
func main() {
person1 := &Person{Name: "Bob", Age: 30, Height: 6.0}
// Struct পয়েন্টার দিয়ে ফিল্ড অ্যাক্সেস এবং পরিবর্তন
fmt.Println("Before:", person1) // আউটপুট: &{Bob 30 6}
person1.Age = 31
person1.Height = 6.1
fmt.Println("After:", person1) // আউটপুট: &{Bob 31 6.1}
}এখানে, person1 একটি *Person টাইপ পয়েন্টার, এবং এটি Person struct এর পয়েন্টার হিসেবে কাজ করছে। ফিল্ডগুলি পরিবর্তন করা হয়েছে এবং এটি পয়েন্টার হিসেবে struct এর ডাটা ম্যানিপুলেট করেছে।
৫. Methods on Structs (Struct এর মেথডস)
Go তে, আপনি structs এর সাথে মেথড (functions) সংজ্ঞায়িত করতে পারেন, যা struct এর ডেটা ম্যানিপুলেট বা প্রসেস করতে ব্যবহৃত হয়।
৫.১ Struct Methods উদাহরণ
package main
import "fmt"
// Struct ডিক্লেয়ার করা
type Person struct {
Name string
Age int
Height float64
}
// Struct Method ডিফাইন করা
func (p *Person) birthday() {
p.Age += 1
fmt.Println("Happy Birthday", p.Name, "!")
}
func main() {
person1 := &Person{Name: "Charlie", Age: 40, Height: 5.8}
// Method কল করা
person1.birthday() // আউটপুট: Happy Birthday Charlie !
fmt.Println("New Age:", person1.Age) // আউটপুট: New Age: 41
}এখানে, birthday() একটি method যা Person struct এর পয়েন্টার হিসেবে ডিফাইন করা হয়েছে এবং এর মাধ্যমে Age ফিল্ডের মান পরিবর্তন করা হয়েছে।
৬. Anonymous Structs (নামহীন Structs)
Go তে আপনি Anonymous Structs তৈরি করতে পারেন, যা struct এর নাম ছাড়া ইনস্ট্যান্স তৈরি করা হয়।
৬.১ Anonymous Struct উদাহরণ
package main
import "fmt"
func main() {
// Anonymous struct তৈরি
person := struct {
Name string
Age int
Height float64
}{
Name: "John",
Age: 30,
Height: 5.9,
}
fmt.Println(person) // আউটপুট: {John 30 5.9}
}এখানে, person একটি নামহীন struct, যা সরাসরি ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা হয়েছে।
সারসংক্ষেপ
- Struct: Go-তে struct একটি কাস্টম ডেটা টাইপ যা একাধিক ভিন্ন ধরনের ডেটাকে একত্রিত করে রাখে। এটি ডেটা গ্রুপিংয়ের জন্য ব্যবহৃত হয়।
- Struct Methods: Go তে struct এর সাথে মেথড সংজ্ঞায়িত করা যায়, যা struct এর ডেটা ম্যানিপুলেট করতে সহায়ক।
- Pointers to Structs: Go তে struct এর পয়েন্টার ব্যবহার করে আপনি struct এর মান পরিবর্তন করতে পারেন, যা মেমরি ব্যবস্থাপনায় দক্ষতা আনে।
- Anonymous Structs: আপনি নামহীন struct তৈরি করে তা একত্রিতভাবে ডেটা ধারণ করতে পারেন।
Go তে structs ব্যবহারের মাধ্যমে আপনি সম্পর্কিত ডেটাগুলিকে একটি কার্যকরী উপায়ে একত্রিত এবং ম্যানিপুলেট করতে পারবেন।
Read more