முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 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 பணிச்சூழலியல் குறுக்குவழிகள்; அடித்தளம் மற்றும் அளவைக் கட்டுப்படுத்த 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ஏற்றுகிறது…

strconv.Atoi உடன் சரம் '42' ஐ எண்ணாக மாற்றவும், பிழையைக் கையாளவும் மற்றும் எண்ணை அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

Quiz#go.m8.l2.e3
தயார்

முழு எண் 42 ஐ சரம் "42" ஆக மாற்றுவதற்கான idiomatic வழி என்ன?

Go
s := ???(42)
// vogliamo s == "42"
பதில் விருப்பங்கள்