Sobes.tech
Junior

Jak można pracować z łańcuchami w języku Go?

sobes.tech AI

Odpowiedź od AI

Łańcuchy w Go są niezmienniczymi sekwencjami bajtów. Mogą reprezentować zarówno tekst UTF-8, jak i dowolne dane binarne.

Główne sposoby pracy:

  • Deklaracja i inicjalizacja:

    var s1 string           // Pusty łańcuch
    s2 := "cześć"            // Inicjalizacja literałem łańcucha
    s3 := `wielolinijkowy
    łańcuch`             // dosłowny literał łańcucha
    
  • Długość łańcucha:

    len(s2) // Długość w bajtach. Dla "cześć" będzie 6.
    
  • Dostęp do bajtów:

    b := s2[0] // Pobranie bajtu pod indeksem. Zwraca 'c' (w UTF-8).
    

    Bezpośredni dostęp do bajtów nie gwarantuje uzyskania pełnego znaku UTF-8.

  • Dostęp do run (znaków UTF-8): Łańcuchy można iterować po runach:

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

    Długość w runach:

    utf8.RuneCountInString(s2) // Długość w runach. Dla "cześć" będzie 6.
    
  • Konkatenacja łańcuchów:

    str1 := "hello"
    str2 := " world"
    result := str1 + str2 // Konkatenacja operatorem +
    

    Dla efektywnej konkatenacji wielu łańcuchów użyj strings.Builder.

    var sb strings.Builder
    sb.WriteString("hello")
    sb.WriteString(" ")
    sb.WriteString("world")
    result := sb.String() // Uzyskanie końcowego łańcucha
    
  • Konwersja między łańcuchami a tablicami bajtów/run:

    byteslice := []byte(s2)   // Łańcuch do tablicy bajtów
    rs := []rune(s2)          // Łańcuch do tablicy runów
    
    backToString := string(byteslice) // Tablica bajtów do łańcucha
    backToString = string(rs)         // Tablica runów do łańcucha
    
  • Pakiet strings: Zapewnia wiele przydatnych funkcji:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Pakiet strconv: Do konwersji łańcuchów na inne typy danych (liczby, boolean) i odwrotnie.

    i, err := strconv.Atoi("123") // Łańcuch na int
    s := strconv.Itoa(456)        // int na łańcuch
    
  • Niezmienniczość: Każda operacja, która wydaje się modyfikować łańcuch (np. konkatenacja), w rzeczywistości tworzy nowy łańcuch. Jest to ważne dla wydajności przy częstych zmianach. W takich przypadkach lepiej używać []byte lub strings.Builder.