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,HasSuffixIndex,LastIndexReplace,ToUpper,ToLower,Trim,TrimSpaceSplit,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ć
[]bytelubstrings.Builder.