মূল কন্টেন্টে যান
মডিউল 8 · 2-এর পাঠ 5কোর্সে 37/50~12 min
মডিউল পাঠ (2/5)

`স্ট্রিংস` এবং `strconv`

strings এবং strconv দুটি প্যাকেজ আপনি ক্রমাগত ব্যবহার করবেন৷ প্রথমটি স্ট্রিংগুলিকে ম্যানিপুলেট করে (বিভক্ত, ট্রিম, প্রতিস্থাপন, অনুসন্ধান); দ্বিতীয়টি স্ট্রিং এবং মৌলিক প্রকারের (int, float, bool) মধ্যে রূপান্তর করে।

strings: যে ফাংশনগুলি আপনি প্রতিদিন পৌঁছান

Go
import "strings"

strings.ToUpper("ciao")              // "CIAO"
strings.ToLower("CIAO")              // "ciao"
strings.Contains("ciao mondo", "mo") // true
strings.HasPrefix("foo.txt", "foo")  // true
strings.HasSuffix("foo.txt", ".txt") // true
strings.Index("ciao", "a")           // 2 (or -1 if absent)
strings.Count("banana", "a")         // 3

strings.Split("a,b,c", ",")               // []string{"a","b","c"}
strings.SplitN("a,b,c,d", ",", 2)         // []string{"a","b,c,d"}
strings.Join([]string{"a","b"}, "-")     // "a-b"

strings.TrimSpace("  ciao\n")             // "ciao"
strings.Trim("__ciao__", "_")             // "ciao"
strings.ReplaceAll("aaa", "a", "b")       // "bbb"
strings.Replace("aaa", "a", "b", 2)       // "bba"  (limit 2)

বরাদ্দ না করে কেস-অসংবেদনশীল তুলনার জন্য EqualFold ভেরিয়েন্ট এবং এক-লাইন পার্সিংয়ের জন্য Cut(s, sep) (before, after, found) রয়েছে।

Go
key, val, ok := strings.Cut("name=Ada", "=")
// "name", "Ada", true

strings.Builder একটি লুপে সংযুক্ত করতে

সংযোজন s = s + "x" একটি লুপে প্রতিটি পুনরাবৃত্তিতে বরাদ্দ করে (স্ট্রিং অপরিবর্তনীয়)। একাধিক ধাপে নির্মিত পাঠ্যের জন্য strings.Builder ব্যবহার করুন:

Go
var b strings.Builder
for i := 0; i < 1000; i++ {
    b.WriteString("x")
}
out := b.String()

পরিমার্জিত বরাদ্দ, কোন অকেজো কপি.

strconv: স্ট্রিং ↔ সংখ্যা / বুল রূপান্তর

Go
import "strconv"

n, err := strconv.Atoi("42")     // int   from decimal
s := strconv.Itoa(42)             // "42"
b, err := strconv.ParseBool("true")

// Generic versions with base and optional bit-size
i64, err := strconv.ParseInt("ff", 16, 64) // 255
u64, err := strconv.ParseUint("7", 10, 8)  // 7
f, err := strconv.ParseFloat("3.14", 64)   // 3.14

// Number → string
strconv.FormatInt(255, 16)                  // "ff"
strconv.FormatFloat(3.14, 'f', 2, 64)       // "3.14"
strconv.FormatBool(true)                    // "true"

Atoi/Itoa হল ergonomic শর্টকাট; বেস এবং আকারের উপর সূক্ষ্ম নিয়ন্ত্রণের জন্য ParseInt/FormatInt ব্যবহার করুন।

পার্সিং ত্রুটিগুলি পরিচালনা করা

Atoi ফেরত দেয় (int, error)। ত্রুটি প্রায় সবসময়ই হয় *strconv.NumError, এবং আপনি এটিকে errors.Is এর মাধ্যমে সেন্টিনেলদের সাথে তুলনা করতে পারেন strconv.ErrSyntax বা strconv.ErrRange:

Go
n, err := strconv.Atoi(input)
switch {
case errors.Is(err, strconv.ErrSyntax):
    return fmt.Errorf("input non numerico: %q", input)
case errors.Is(err, strconv.ErrRange):
    return fmt.Errorf("numero fuori range: %q", input)
case err != nil:
    return err
}
_ = n

ব্যায়াম

ব্যায়াম#go.m8.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

কমায় 'a,b,c' স্ট্রিংটি বিভক্ত করুন এবং ফলস্বরূপ স্লাইসটি প্রিন্ট করুন।

সম্পাদক লোড হচ্ছে...

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#go.m8.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

স্ট্রিং '42' কে strconv.Atoi দিয়ে int-এ রূপান্তর করুন, ত্রুটিটি পরিচালনা করুন এবং নম্বরটি প্রিন্ট করুন।

সম্পাদক লোড হচ্ছে...

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

Quiz#go.m8.l2.e3
প্রস্তুত

পূর্ণসংখ্যা 42 কে স্ট্রিং "42" এ রূপান্তর করার বাহাদুরি উপায় কি?

Go
s := ???(42)
// vogliamo s == "42"
উত্তরের বিকল্প