Sobes.tech
Junior

Ako sa pracuje s reťazcami v jazyku Go?

sobes.tech AI

Odpoveď od AI

Riadky v jazyku Go sú nemenné sekvencie bajtov. Môžu predstavovať ako text UTF-8, tak aj ľubovoľné binárne dáta.

Hlavné spôsoby práce:

  • Vyhlásenie a inicializácia:

    var s1 string           // Prázdny reťazec
    s2 := "ahoj"            // Inicializácia literálom reťazca
    s3 := `viacriadkový
    reťazec`                // Surový literál reťazca
    
  • Dĺžka reťazca:

    len(s2) // Dĺžka v bajtoch. Pre "ahoj" to bude 4.
    
  • Prístup k bajtom:

    b := s2[0] // Získanie bajtu na indexe. Vráti 'a' (v UTF-8).
    

    Priamy prístup k bajtom nezaručuje získanie UTF-8 znaku.

  • Prístup k rúnam (UTF-8 znakom): Riadky je možné iterovať po rúnach:

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

    Dĺžka v rúnach:

    utf8.RuneCountInString(s2) // Dĺžka v rúnach. Pre "ahoj" to bude 4.
    
  • Konkatenácia reťazcov:

    str1 := "hello"
    str2 := " world"
    result := str1 + str2 // Konkatenácia operátorom +
    

    Pre efektívnu konkatenáciu veľkého počtu reťazcov použite strings.Builder.

    var sb strings.Builder
    sb.WriteString("hello")
    sb.WriteString(" ")
    sb.WriteString("world")
    result := sb.String() // Získanie výsledného reťazca
    
  • Prevod medzi reťazcami a rezmi bajtov/rún:

    byteslice := []byte(s2)   // Reťazec na rez bajtov
    rs := []rune(s2)          // Reťazec na rez rún
    
    backToString := string(byteslice) // Rez bajtov na reťazec
    backToString = string(rs)         // Rez rún na reťazec
    
  • Modul strings: Poskytuje množstvo užitočných funkcií:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Modul strconv: Na prevod reťazcov na iné dátové typy (čísla, boolean) a späť.

    i, err := strconv.Atoi("123") // Reťazec na int
    s := strconv.Itoa(456)        // int na reťazec
    
  • Nemennosť: Akékoľvek operácie, ktoré sa javia ako zmena reťazca (napríklad konkatenácia), v skutočnosti vytvárajú nový reťazec. Je dôležité to brať do úvahy pre výkon pri častých zmenách. V takých prípadoch je lepšie použiť []byte alebo strings.Builder.