मुख्य सामग्री पर जाएं
मॉड्यूल 8 · पाठ 2 का 5पाठ्यक्रम में 37/50~12 min
मॉड्यूल पाठ (2/5)

`स्ट्रिंग्स` और `strconv`

strings और strconv दो पैकेज हैं जिनका आप लगातार उपयोग करेंगे। पहला स्ट्रिंग्स में हेरफेर करता है (विभाजित, ट्रिम, प्रतिस्थापित, खोज); दूसरा स्ट्रिंग्स और मूल प्रकारों (इंट, फ्लोट, बूल) के बीच परिवर्तित होता है।

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 एर्गोनोमिक शॉर्टकट हैं; आधार और आकार पर अच्छे नियंत्रण के लिए 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लोड हो रहा है...

स्ट्रिंग 'ए,बी,सी' को अल्पविराम पर विभाजित करें और परिणामी स्लाइस को प्रिंट करें।

संपादक लोड हो रहा है...

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#go.m8.l2.e2
प्रयास: 0लोड हो रहा है...

strconv.Atoi के साथ स्ट्रिंग '42' को int में बदलें, त्रुटि को संभालें और नंबर प्रिंट करें।

संपादक लोड हो रहा है...

3 प्रयासों के बाद समाधान उपलब्ध है

Quiz#go.m8.l2.e3
तैयार

पूर्णांक 42 को स्ट्रिंग "42" में बदलने का मुहावरेदार तरीका क्या है?

Go
s := ???(42)
// vogliamo s == "42"
उत्तर विकल्प