Sobes.tech
Junior

Jak lze pracovat s řetězci v jazyce Go?

sobes.tech AI

Odpověď od AI

Řetězce v jazyce Go jsou neměnné sekvence bajtů. Mohou představovat jak text ve formátu UTF-8, tak libovolná binární data.

Hlavní způsoby práce:

  • Deklarace a inicializace:

    var s1 string           // Prázdný řetězec
    s2 := "ahoj"             // Inicializace literálem řetězce
    s3 := `víceřádkový
    řetězec`             // Surový literál řetězce
    
  • Délka řetězce:

    len(s2) // Délka v bajtech. Pro "ahoj" je 4.
    
  • Přístup k bajtům:

    b := s2[0] // Získání bajtu na indexu. Vrátí 'a' (v UTF-8).
    

    Přímý přístup k bajtům nezaručuje získání celého UTF-8 znaku.

  • Přístup k runám (UTF-8 znakům): Řetězce lze iterovat podle run:

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

    Délka v rune:

    utf8.RuneCountInString(s2) // Délka v rune. Pro "ahoj" je 4.
    
  • Konkatenace řetězců:

    str1 := "ahoj"
    str2 := " svět"
    result := str1 + str2 // Konkatenace operátorem +
    

    Pro efektivní spojování velkého počtu řetězců použijte strings.Builder.

    var sb strings.Builder
    sb.WriteString("ahoj")
    sb.WriteString(" ")
    sb.WriteString("svět")
    result := sb.String() // Výsledný řetězec
    
  • Konverze mezi řetězci a řezem bajtů/rune:

    byteslice := []byte(s2)   // Řetězec na řez bajtů
    rs := []rune(s2)          // Řetězec na řez run
    
    backToString := string(byteslice) // Řez bajtů na řetězec
    backToString = string(rs)         // Řez run na řetězec
    
  • Balíček strings: Nabízí mnoho užitečných funkcí:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Balíček strconv: Pro převod řetězců na jiné datové typy (čísla, booleany) a zpět.

    i, err := strconv.Atoi("123") // Řetězec na int
    s := strconv.Itoa(456)        // Int na řetězec
    
  • Neměnnost: Jakákoli operace, která se zdá, že mění řetězec (například spojování), ve skutečnosti vytváří nový řetězec. To je důležité pro výkon při častých změnách. V takových případech je lepší použít []byte nebo strings.Builder.