Sobes.tech
Junior

Cum se pot lucra cu șirurile în limbajul Go?

sobes.tech AI

Răspuns de la AI

Șirurile în Go sunt secvențe imuabile de octeți. Ele pot reprezenta atât text UTF-8, cât și date binare arbitrare.

Principalele moduri de lucru:

  • Declarare și inițializare:

    var s1 string           // Șir gol
    s2 := "salut"            // Inițializare cu literal de șir
    s3 := `multi-line
    șir`                // Literal de șir brut
    
  • Lungimea șirului:

    len(s2) // Lungimea în octeți. Pentru "salut" va fi 6.
    
  • Acces la octeți:

    b := s2[0] // Obține octetul de la index. Returnează 's' (în UTF-8).
    

    Accesul direct la octeți nu garantează obținerea unui caracter UTF-8 complet.

  • Acces la rune (caractere UTF-8): Șirurile pot fi iterate pe rune:

    for index, runeValue := range s2 {
        fmt.Printf("Index: %d, Runa: %c\n", index, runeValue)
    }
    

    Lungimea în rune:

    utf8.RuneCountInString(s2) // Lungimea în rune. Pentru "salut" va fi 6.
    
  • Concatenarea șirurilor:

    str1 := "hello"
    str2 := " lume"
    result := str1 + str2 // Concatenare cu +
    

    Pentru concatenări eficiente ale multor șiruri, folosiți strings.Builder.

    var sb strings.Builder
    sb.WriteString("hello")
    sb.WriteString(" ")
    sb.WriteString("lume")
    result := sb.String() // Obține șirul rezultat
    
  • Conversia între șiruri și tăieturi de octeți/rune:

    byteslice := []byte(s2)   // Șir în tăietură de octeți
    rs := []rune(s2)          // Șir în tăietură de rune
    
    backToString := string(byteslice) // Tăietură de octeți în șir
    backToString = string(rs)         // Tăietură de rune în șir
    
  • Pachetul strings: Oferă multe funcții utile:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Pachetul strconv: Pentru conversia șirurilor în alte tipuri de date (numere, booleani) și invers.

    i, err := strconv.Atoi("123") // Șir în int
    s := strconv.Itoa(456)        // Int în șir
    
  • Imutabilitatea: Orice operație care pare să modifice un șir (de exemplu, concatenarea) creează de fapt un nou șir. Acest lucru este important pentru performanță în cazul modificărilor frecvente. În astfel de cazuri, este mai bine să folosiți []byte sau strings.Builder.