ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 5లో పాఠం 2కోర్సులో 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 ఎర్గోనామిక్ సత్వరమార్గాలు; బేస్ మరియు పరిమాణంపై చక్కటి నియంత్రణ కోసం 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తో పూర్ణాంకానికి మార్చండి, లోపాన్ని పరిష్కరించండి మరియు సంఖ్యను ముద్రించండి.

ఎడిటర్ లోడ్ అవుతోంది…

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

Quiz#go.m8.l2.e3
సిద్ధంగా ఉంది

పూర్ణాంకం 42ని స్ట్రింగ్ "42"గా మార్చడానికి ఇడియోమాటిక్ మార్గం ఏమిటి?

Go
s := ???(42)
// vogliamo s == "42"
సమాధాన ఎంపికలు