ماڈیول اسباق (2/5)
`strings` اور `strconv`
strings اور strconv دو پیکیجز ہیں جو آپ مسلسل استعمال کریں گے۔ پہلا تاروں کو جوڑتا ہے (تقسیم، تراشنا، بدلنا، تلاش کرنا)؛ دوسرا تار اور بنیادی اقسام (int، float، bool) کے درمیان بدلتا ہے۔
strings: وہ فنکشنز جن تک آپ ہر روز پہنچتے ہیں۔
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) ایک سطری تجزیہ کے لیے بھی ہیں۔
key, val, ok := strings.Cut("name=Ada", "=")
// "name", "Ada", truestrings.Builder ایک لوپ میں جوڑنا
کنکٹنیشن s = s + "x" ایک لوپ میں ہر تکرار پر مختص کرتا ہے (سٹرنگز ناقابل تغیر ہیں)۔ متعدد مراحل میں بنائے گئے متن کے لیے استعمال کریں strings.Builder:
var b strings.Builder
for i := 0; i < 1000; i++ {
b.WriteString("x")
}
out := b.String()امورٹائزڈ مختص، کوئی بیکار کاپیاں نہیں۔
strconv: سٹرنگ ↔ نمبر / بول کی تبدیلیاں
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:
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مشقیں
کوما پر سٹرنگ 'a,b,c' کو تقسیم کریں اور نتیجے میں آنے والے ٹکڑے کو پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
سٹرنگ '42' کو strconv.Atoi کے ساتھ int میں تبدیل کریں، ایرر کو ہینڈل کریں اور نمبر پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
عدد 42 کو سٹرنگ "42" میں تبدیل کرنے کا محاورہ طریقہ کیا ہے؟
s := ???(42)
// vogliamo s == "42"