1 গো ভাষার ডেটা টাইপ সম্পর্কিত পরিচিতি

গো ভাষায়, ডেটা টাইপগুলি প্রোগ্রামিংয়ের ভিত্তি গঠন করে এবং ভেরিয়েবল যে ধরণের ডেটা সংরক্ষণ করতে পারে তা নির্ধারণ করে। গো ভাষায় সরবরাহকৃত মৌলিক ডেটা টাইপগুলি প্রধানত নিম্নলিখিত বিভাগে বিভক্ত করা হয়:

ডেটা টাইপ বর্ণনা মেমোরি ব্যবহার
bool বুলিয়ান টাইপ, সত্য বা মিথ্যা সংরক্ষণ করার জন্য 1 বাইট
int, uint সাইন এবং আনসাইন্ড ইন্টিজার, ডিফল্ট সাইজ যে পৃথক শিস্টেম প্ল্যাটফর্মের উপর নির্ভর করে 4 বা 8 বাইট
int8, uint8 8-বিট সাইন এবং আনসাইন্ড ইন্টিজার 1 বাইট
int16, uint16 16-বিট সাইন এবং আনসাইন্ড ইন্টিজার 2 বাইট
int32, uint32 32-বিট সাইন এবং আনসাইন্ড ইন্টিজার 4 বাইট
int64, uint64 64-বিট সাইন এবং আনসাইন্ড ইন্টিজার 8 বাইট
float32 32-বিট ফ্লোটিং পয়েন্ট নম্বর 4 বাইট
float64 64-বিট ফ্লোটিং পয়েন্ট নম্বর 8 বাইট
complex64 32-বিট রিয়েল এবং কাল্পনিক অংশ সহ কমপ্লেক্স নম্বর 8 বাইট
complex128 64-বিট রিয়েল এবং কাল্পনিক অংশ সহ কমপ্লেক্স নম্বর 16 বাইট
byte uint8 এর মতো 1 বাইট
rune int32 এর মতো, একটি ইউনিকোড কোড পয়েন্ট প্রতিনিধিত্ব করছে 4 বাইট
string স্ট্রিং টাইপ স্ট্রিং এর দৈর্ঘ্যের উপর নির্ভর করছে
error ভুল ইন্টারফেস, ভুল তথ্য প্রত্যাখ্যান করার জন্য ব্যবহৃত কোনো নির্ধারিত সাইজ নেই

এই ধরনগুলি বিভিন্ন আবশ্যকতার অনুযায়ী নির্বাচন করা যেতে পারে, যেমন সংখ্যাগণনা, পাঠ্য প্রসেসিং, বা লজিক্যাল নিয়ন্ত্রণ।

3.1 ফ্লোটিং পয়েন্ট ডেটা টাইপ এর ওভারভিউ

Go ভাষায়, ফ্লোটিং-পয়েন্ট টাইপ এর মধ্যে float32 এবং float64 রয়েছে, যা মৌলিক 32-বিট এবং 64-বিট ফ্লোটিং-পয়েন্ট ডেটা দেয়। সাধারণভাবে, float64 ব্যবহার করা যায় যেহেতু এটি বড় রেঞ্জ এবং আরও সঠিক নির্দিষ্টতা প্রদান করে।

  • float32 প্রায় 23 টি গুরুত্বপূর্ণ বিট রয়েছে, যা প্রায় 7 টি দশমিক সংখ্যা রয়েছে।
  • float64 প্রায় 52 টি গুরুত্বপূর্ণ বিট রয়েছে, যা প্রায় 16 টি দশমিক সংখ্যা রয়েছে।

3.2 ফ্লোটিং পয়েন্ট ভেরিয়েবল ব্যবহার

ফ্লোটিং-পয়েন্ট ভেরিয়েবল সরাসরি লিটারেল দিয়ে বা var কীওয়ার্ড ব্যবহার করে ঘোষণা করা যেতে পারে:

package main
import "fmt"

func main() {
    var f1 float32 = 3.14 // বৈশিষ্ট্যপূর্ণভাবে float32 ধরন নির্দিষ্ট করুন
    f2 := 3.14            // স্বয়ংক্রিয়ভাবে float64 টাইপ ধরা হয়েছে
    fmt.Println(f1, f2)
}

3.3 ফ্লোটিং পয়েন্ট গাণিতিক এবং সমস্যা

ফ্লোটিং-পয়েন্ট গাণিতিক সুতরাং নির্দিষ্টতা হারানোর কারণ হতে পারে। একে খুব উচ্চ নির্দিষ্টতা সহ অপারেশন চালানো সাধারণ সমস্যা, বিশেষত যখন খুব কাছাকাছি দুটি সংখ্যা থেকে বিয়োগ করা হয়।

package main
import "fmt"

func main() {
    f1 := .1
    f2 := .2
    f3 := f1 + f2
    fmt.Println(f3) // দশমিকের নির্দিষ্টতা সমস্যার কারণে, প্রত্যাশিত .3 হয়না সম্ভব

    // ফর্ম্যাটেড আউটপুট ব্যবহার করে নির্দিষ্টতা সমস্যা সমাধান
    fmt.Printf("%.1f\n", f3) // আউটপুট .3 এ সংশোধিত হয়েছে
}

4 বুলিয়ান ডেটা টাইপ

4.1 বুলিয়ান ডেটা টাইপের ওভারভিউ

বুলিয়ান সবচেয়ে সহজ ডেটা টাইপ, এবং এটি শুধুমাত্র দুটি মান রাখতে পারে: true (সত্য) এবং false (মিথ্যা)। এটি শর্তবিদ্ধ বিবেচনা বিবেচনা এবং লুপ নিয়ন্ত্রণ গুণগুলিতে একটি অত্যন্ত গুরুত্বপূর্ণ অবস্থান ধরে।

4.2 বুলিয়ান ভেরিয়েবল ব্যবহার

বুলিয়ান ভেরিয়েবল ঘোষণা এবং ব্যবহার করা হয়:

package main
import "fmt"

func main() {
    var success bool = true
    var fail bool = false
    fmt.Println("অপারেশন সফল:", success)
    fmt.Println("অপারেশন ব্যার্থ:", fail)
}

সত্যায়িত বুলিয়ান মানগুলি সাধারণভাবে শর্তবিন্যাসে ব্যবহৃত হয়:

package main
import "fmt"

func main() {
    a := 10
    b := 20
    fmt.Println("a == b:", a == b) // মিথ্যা
    fmt.Println("a < b:", a < b)   // সত্য
}

5 স্ট্রিং ডেটা টাইপ

5.1 স্ট্রিং ওভারভিউ

একটি স্ট্রিং হল অক্ষরের সংগ্রহ। Go ভাষায়, স্ট্রিংগুলি অপরিবর্তনী অবস্থায় রয়েছে। প্রতিটি স্ট্রিং দুটি অংশের থাকে: অধীনের বাইট অ্যারের পয়েন্টার এবং লেংথ। স্ট্রিংগুলি যেকোনও ডেটা, বাইটসহ ধারণ করতে পারে।

5.2 স্ট্রিং ভেরিয়েবল ব্যবহার

স্ট্রিং ভেরিয়েবল সাধারণভাবে ডাবল কোট " ব্যবহার করে ঘোষণা করা হয়, তবে আপনি এটি বহুলায়ন স্ট্রিং তৈরি করতে পারেন ব্যবহার করে backticks ``:

package main
import "fmt"

func main() {
    var s1 string = "হ্যালো"
    s2 := "বিশ্ব"
    s3 := `এটা একটি
    মাল্টিপল লাইন
    স্ট্রিং`
    fmt.Println(s1)
    fmt.Println(s2)
    fmt.Println(s3)
}

একবার স্ট্রিং তৈরি হলে, এর কন্টেন্ট পরিবর্তন করা যাবে না। নিম্নলিখিত অপারেশন অবৈধ এবং এটি সংকলন ত্রুটি দেবে এবং মোচন করার জন্য কারিগরি ত্রুটি দেবে:

s := "হ্যালো"
s[] = 'H' // কমপাইলেশন ত্রুটি: স্ট্রিং কন্টেন্ট অপরিবর্তনীয়

5.3 স্ট্রিং অপারেশন

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

5.3.1 স্ট্রিং সংযোজন

Go ভাষায়, আপনি স্ট্রিং সংযোজন করার জন্য প্লাস চিহ্ন (+) অপারেটর ব্যবহার করতে পারেন, যা সবচাইতে সরাসরি পদ্ধতি। উত্তরক্ষেপ করে একে strings.Builder ব্যবহার করা যায় যেটার এক্ষেত্রে পারফর্মেন্সের জন্য পরামর্শ দেওয়া হয়।

package main

import (
    "fmt"
    "strings"
)

func main() {
    // + ব্যবহারে স্ট্রিং যোগ করা
    hello := "হ্যালো, "
    world := "বিশ্ব!"
    result := hello + world
    fmt.Println(result) // উত্তর: হ্যালো, বিশ্ব!

    // strings.Builder ব্যবহারে স্ট্রিং যোগ করা
    var sb strings.Builder
    sb.WriteString("হ্যালো, ")
    sb.WriteString("বিশ্ব!")
    fmt.Println(sb.String()) // উত্তর: হ্যালো, বিশ্ব!
}

5.3.2 স্ট্রিং ভাঙ্গনি

strings.Split ফাংশন ব্যবহার করে স্ট্রিং বিয়োগের ভিত্তিতে স্লাইসে স্ট্রিং ভাগ করা যায়।

package main

import (
    "fmt"
    "strings"
)

func main() {
    // স্ট্রিং ডিফাইন করুন
    sentence := "Go হল একটি ওপেন সোর্স প্রোগ্রামিং ভাষা"

    // স্পেসে ভিত্তি করে স্ট্রিং ভাঙতে
    words := strings.Split(sentence, " ")
    for _, word := range words {
        fmt.Printf("%s\n", word)
    }
    // আউটপুট:
    // Go
    // হল
    // একটি
    // োপেন
    // সোর্স
    // প্রোগ্রামিং
    // ভাষা
}

5.3.3 ইনডেক্স অ্যাক্সেস

গোবাংলায়, একটি স্ট্রিং একটি অপরিবর্তনীয় বাইট সিকোয়েন্স। আপনি ইনডেক্সিং ব্যবহার করে স্ট্রিংগে নির্দিষ্ট বাইট অ্যাক্সেস করতে পারেন। তবে, গুরুত্বপূর্ণ হলো যেন একটি স্ট্রিং এমন মাল্টি-বাইট বর্ণ (যেমন UTF-8 সংকেতিত বর্ণমালা) ধারণ করতে পারে, তাই সরাসরি ইনডেক্সিং না করা যেতে পারে বেশি প্রত্যাশিত একক অক্ষর।

package main

import "fmt"

func main() {
    s := "হ্যালো, 世界"
    for i := 0; i < len(s); i++ {
        fmt.Printf("%d: %x\n", i, s[i])
    }
    // মন রাখুন: এটি বাইটগুলির হেক্সাডেসিম্যাল প্রতিনিধিতা দেবে, না ক্যারেক্টারের
}

স্ট্রিং অক্ষরভেদে পার্সকরিতে, আপনি range লুপ ব্যবহার করতে পারেন।

package main

import "fmt"

func main() {
    s := "হ্যালো, 世界"
    for index, runeValue := range s {
        fmt.Printf("%d: %U '%c'\n", index, runeValue, runeValue)
    }
    // আউটপুট: প্রতি অক্ষরের জন্য ইন্ডেক্স, ইউনিকোড এনকোডিং, এবং স্বয়ং অক্ষর
}

5.3.4 দৈর্ঘ্য অর্জন

len ফাংশন দিয়ে স্ট্রিংয়ের দৈর্ঘ্য অর্জন করা যায়, অর্থাৎ, স্ট্রিং এর ভিতরের বাইট সিকোয়েন্সের দৈর্ঘ্য। UTF-8 স্ট্রিংগুলির জন্য, যদি আপনি যথাযথভাবে বহু-বাইট বর্ণনা সহ অংকের সংখ্যা অর্জন করতে চান, তবে আপনাকে utf8.RuneCountInString ফাংশন ব্যবহার করতে হবে। এটি ঠিকভাবে বহু-বাইট বর্ণনা সহ সাম্প্রতিক সংখ্যাগুলি হ্যান্ডেল করতে পারে।

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "হ্যালো, 世界"
    fmt.Println("বাইটের দৈর্ঘ্য:", len(s)) // বাইট দৈর্ঘ্য প্রদর্শন করুন
    fmt.Println("বর্ণের দৈর্ঘ্য:", utf8.RuneCountInString(s)) // অক্ষরের দৈর্ঘ্য অর্জন করুন
}

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