string în Go

Tipul pentru texte: o secvență de octeți nemodificabilă, de obicei UTF-8; se concatenează cu + și se compară cu ==.

Sintaxă
var s string            // ""
s := "Bună, Iași!"
r := `text brut
pe mai multe rânduri`
s + t   s[i]   s[a:b]   len(s)

Ce face string

string ține text ca o secvență de octeți nemodificabilă. Literalele între ghilimele ("...") acceptă secvențe ca \n, \t, \", iar cele între apostroafe inverse (`...`) sunt brute și pot avea mai multe rânduri. Fișierele sursă Go sunt UTF-8, deci textele cu diacritice funcționează direct. Valoarea zero este textul gol "".

Texte se lipesc cu + și se compară cu ==, <, > (ordine pe octeți). s[i] dă un octet, s[a:b] un subtext (care împarte memoria cu originalul), iar len(s) numărul de octeți. Pentru litere, folosește range sau []rune.

Prelucrările obișnuite sunt în pachetele strings (căutare, înlocuire, împărțire), strconv (conversii din și în numere), fmt (formatare) și unicode/utf8. Pentru a construi texte din multe bucăți, strings.Builder este mult mai rapid decât + repetat.

Exemple

Exemplul 1: Operații de bază

package main

import (
    "fmt"
    "strings"
)

func main() {
    prenume, nume := "Ana", "Popescu"
    complet := prenume + " " + nume
    fmt.Println(complet, len(complet))
    fmt.Println(complet == "Ana Popescu", "Arad" < "Brașov")
    fmt.Println(complet[:3], strings.ToUpper(nume))
    fmt.Println("Tab:\tgata\n\"între ghilimele\"")
    fmt.Println(`brut: \n rămâne \n`)
}

Rezultat

Ana Popescu 11
true true
Ana POPESCU
Tab:	gata
"între ghilimele"
brut: \n rămâne \n

Exemplul 2: Conversii între texte și numere

package main

import (
    "fmt"
    "strconv"
)

func main() {
    n, err := strconv.Atoi("2026")
    fmt.Println(n+1, err)
    text := strconv.Itoa(42) + " lei"
    fmt.Println(text)
    fmt.Println(fmt.Sprintf("%.1f%%", 19.456))
    fmt.Println(string(rune(259)), string([]byte{73, 97}))
}

Rezultat

2027 <nil>
42 lei
19.5%
ă Ia

Greșeli frecvente

  • s[0] = 'x': textele nu se modifică pe loc.
  • += într-o buclă cu mii de pași: fiecare pas copiază tot textul. Folosește strings.Builder.
  • string(n) cu n int: dă un caracter, nu cifre; go vet avertizează conversion from int to string yields a string of one rune, not a string of digits.

Comenzi înrudite

  • string-uri, rune și byte: Textul în Go este UTF-8: len dă octeți, range dă rune (caractere), byte este un octet, rune un caracter.
  • tipuri de bază: Tipurile simple din Go: bool, string, întregi cu și fără semn, numere reale, complexe, byte și rune.
  • len și cap: len dă numărul de elemente (sau octeți la texte); cap dă capacitatea unui slice, array sau canal.