Go-তে Type এবং Value এর সাথে কাজ করা
Go প্রোগ্রামিং ভাষায় type এবং value দুটি গুরুত্বপূর্ণ ধারণা। Type (টাইপ) হল একটি ভেরিয়েবলের ধরনের সংজ্ঞা, যেমন int, string, বা struct। Value (ভ্যালু) হল একটি ভেরিয়েবলের আসল মান, যা টাইপ অনুযায়ী নির্ধারিত হয়। Go তে types এবং values এর মধ্যে পার্থক্য বুঝে আপনি আরও কার্যকর কোড লিখতে পারেন।
এখানে আমরা type এবং value এর সাথে কাজ করার বিভিন্ন পদ্ধতি এবং উদাহরণ নিয়ে আলোচনা করব।
১. Types (টাইপ)
Go-তে, types বিভিন্ন ধরনের ভেরিয়েবল এবং ডেটা স্ট্রাকচার প্রকাশ করে। Go প্রোগ্রামে বিভিন্ন ধরনের টাইপ রয়েছে যেমন int, string, float64, bool, এবং কাস্টম টাইপ যেমন struct, array, slice, ইত্যাদি।
১.১ Primitive Types (প্রিমিটিভ টাইপ)
Go-তে কিছু প্রাথমিক টাইপ রয়েছে, যেমন:
- int: পূর্ণসংখ্যা (integer)
- float64: দশমিক সংখ্যা (floating-point)
- bool: বুলিয়ান মান (true বা false)
- string: স্ট্রিং (টেক্সট)
package main
import "fmt"
func main() {
var i int = 10
var f float64 = 3.14
var b bool = true
var s string = "Hello, Go!"
fmt.Println(i) // আউটপুট: 10
fmt.Println(f) // আউটপুট: 3.14
fmt.Println(b) // আউটপুট: true
fmt.Println(s) // আউটপুট: Hello, Go!
}এখানে, int, float64, bool, এবং string প্রিমিটিভ টাইপগুলোর উদাহরণ দেওয়া হয়েছে।
১.২ Custom Types (কাস্টম টাইপ)
Go-তে আপনি নিজের কাস্টম টাইপ তৈরি করতে পারেন type কিওয়ার্ড ব্যবহার করে। উদাহরণস্বরূপ, একটি Person struct টাইপ তৈরি করা যেতে পারে।
package main
import "fmt"
// কাস্টম টাইপ (struct) তৈরি করা
type Person struct {
Name string
Age int
}
func main() {
// কাস্টম টাইপের ইনস্ট্যান্স তৈরি
p := Person{Name: "Alice", Age: 25}
fmt.Println(p) // আউটপুট: {Alice 25}
}এখানে, Person একটি কাস্টম টাইপ যা দুটি ফিল্ড (Name এবং Age) ধারণ করে।
২. Values (ভ্যালু)
Value হল একটি ভেরিয়েবলের আসল মান। Go তে ভ্যালু বিভিন্নভাবে পরিচালনা করা হয়, যেমন ভ্যালু পাস করা বা পরিবর্তন করা। এটি pass-by-value বা pass-by-reference এর মাধ্যমে হতে পারে, যেখানে ভ্যালু পাস করা হয় এবং টাইপের পয়েন্টার পাস করা হয়।
২.১ Pass by Value (পাস বাই ভ্যালু)
Go তে ডিফল্টভাবে ভ্যালু পাস করা হয় (pass-by-value)। এর মানে হল যে, ফাংশনে যেসব আর্গুমেন্ট পাঠানো হয়, তা মূল ভেরিয়েবলের কপি হবে।
package main
import "fmt"
func changeValue(x int) {
x = 20 // এখানে x-কে নতুন মান দেওয়া হচ্ছে
}
func main() {
a := 10
changeValue(a)
fmt.Println(a) // আউটপুট: 10 (মূল মান পরিবর্তিত হয়নি)
}এখানে, changeValue ফাংশনে a এর কপি পাঠানো হয়, তাই মূল ভেরিয়েবলটি অপরিবর্তিত থাকে।
২.২ Pass by Reference (পাস বাই রেফারেন্স)
যদি আপনি চাইছেন যে, ফাংশনে পাঠানো আর্গুমেন্টের পরিবর্তন মূল ভেরিয়েবলে প্রভাব ফেলুক, তবে পয়েন্টার ব্যবহার করতে হবে। এটি pass-by-reference হয়, যেখানে আপনি মূল ভেরিয়েবলের ঠিকানা (memory address) পাঠান।
package main
import "fmt"
func changeValue(x *int) {
*x = 20 // পয়েন্টারের মাধ্যমে মূল ভেরিয়েবলের মান পরিবর্তন করা
}
func main() {
a := 10
changeValue(&a) // পয়েন্টারের ঠিকানা পাঠানো হচ্ছে
fmt.Println(a) // আউটপুট: 20 (মূল মান পরিবর্তিত হয়েছে)
}এখানে, &a ব্যবহার করে a এর পয়েন্টার পাঠানো হয়েছে, ফলে changeValue ফাংশনে *x = 20 দ্বারা a এর মান পরিবর্তন হয়েছে।
৩. Type Conversion এবং Type Assertion
৩.১ Type Conversion (টাইপ কনভার্শন)
Go-তে, এক টাইপ থেকে অন্য টাইপে কনভার্ট করা সম্ভব। টাইপ কনভার্শন এর মাধ্যমে আপনি বিভিন্ন টাইপের মানের সাথে কাজ করতে পারেন।
package main
import "fmt"
func main() {
var i int = 42
var f float64 = float64(i) // int থেকে float64-এ কনভার্ট করা
fmt.Println(f) // আউটপুট: 42
}এখানে, int টাইপের ভেরিয়েবল i কে float64 টাইপে কনভার্ট করা হয়েছে।
৩.২ Type Assertion (টাইপ অ্যাসারশন)
টাইপ অ্যাসারশন ব্যবহার করে আপনি একটি interface টাইপের ভেরিয়েবলকে নির্দিষ্ট টাইপে কাস্ট করতে পারেন।
package main
import "fmt"
func main() {
var i interface{} = 42
// টাইপ অ্যাসারশন
v := i.(int) // interface{} থেকে int টাইপে কাস্ট
fmt.Println(v) // আউটপুট: 42
}এখানে, i এর টাইপ interface{} হলেও, টাইপ অ্যাসারশনের মাধ্যমে আমরা এটি int টাইপে কাস্ট করেছি।
৪. Type Switches
Type switch হল এক ধরনের switch statement যেখানে আমরা টাইপের উপর ভিত্তি করে বিভিন্ন অপারেশন করতে পারি।
package main
import "fmt"
func printType(x interface{}) {
switch v := x.(type) {
case int:
fmt.Println("Integer:", v)
case string:
fmt.Println("String:", v)
default:
fmt.Println("Unknown type")
}
}
func main() {
printType(42) // আউটপুট: Integer: 42
printType("Hello") // আউটপুট: String: Hello
printType(3.14) // আউটপুট: Unknown type
}এখানে, টাইপ সুইচের মাধ্যমে আমরা ভেরিয়েবলের টাইপ চেক করছি এবং তার উপর নির্ভর করে আলাদা আলাদা কাজ করছি।
সারসংক্ষেপ
- Types: Go তে primitive types যেমন
int,string,bool, এবং কাস্টম টাইপ যেমনstruct,array,sliceব্যবহার করা হয়। - Values: Go তে ভ্যালু পাস (pass-by-value) এবং পয়েন্টার পাস (pass-by-reference) এর মাধ্যমে ভেরিয়েবলের মান পরিবর্তন বা যাচাই করা যায়।
- Type Conversion: Go তে এক টাইপ থেকে অন্য টাইপে কনভার্ট করা যায় এবং টাইপ অ্যাসারশন ব্যবহার করে interface{} থেকে নির্দিষ্ট টাইপে কাস্ট করা যায়।
- Type Switch: টাইপ সুইচ ব্যবহার করে আমরা বিভিন্ন টাইপের উপর ভিত্তি করে আলাদা কোড ব্লক চালাতে পারি।
Go তে types এবং values এর ব্যবহারে কোডের কার্যক্ষমতা, ক্লিনলিনেস, এবং কার্যকারিতা উন্নত হয়, এবং সেগুলি কোডের নমনীয়তা বাড়াতে সাহায্য করে।
Read more