مرکزی مواد پر جائیں
ماڈیول 8 · سبق 2 از 5کورس میں 37/50~12 min
ماڈیول اسباق (2/5)

`strings` اور `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"
جواب کے اختیارات