Как можете да работите със низове в езика Go?
sobes.tech AI
Отговор от AI
В Go низовете са неизменяеми последователности от байтове.
Основните начини за работа с низове:
-
Създаване:
// Литерал на низ s1 := "Hello, Go!" // От масив от байтове byteArray := []byte{'H', 'e', 'l', 'l', 'o'} s2 := string(byteArray) -
Конкатенация:
s3 := "World" result := s1 + " " + s3 // Използване на оператора +За голямо количество конкатенации е по-ефективно да се използва
strings.Builder:import "strings" var sb strings.Builder sb.WriteString("Hello") sb.WriteString(", ") sb.WriteString("World!") result2 := sb.String() -
Дължина:
- В байтове:
byteLength := len(s1) - В символи (руни):
runeLength := utf8.RuneCountInString(s1) // Изисква импорт "unicode/utf8"
- В байтове:
-
Достъп до символи (руни) и итерация: В Go низовете са съставени от байтове, но при итерация с
rangeте се декодират в руни (кодови точки Unicode).import "fmt" for index, runeValue := range s1 { fmt.Printf("Индекс: %d, Руна: %c, Тип: %T\n", index, runeValue, runeValue) }Пряк достъп по индекс връща байт, а не руна:
b := s1[0] // Връща байт 'H' -
Преобразуване:
- В масив от байтове:
byteSlice := []byte(s1) - В масив от руни:
runeSlice := []rune(s1)
- В масив от байтове:
-
Пакет
strings: Предоставя множество полезни функции за работа с низове:strings.Contains(s, substr): Проверява наличието на подниз.strings.HasPrefix(s, prefix): Проверява дали низът започва с даден префикс.strings.HasSuffix(s, suffix): Проверява дали низът завършва с даден суфикс.strings.Index(s, substr): Търси първото вхождение на подниз.strings.ReplaceAll(s, old, new): Заменя всички вхождения на подниз.strings.Split(s, sep): Разделя низ по разделител.strings.Join(a []string, sep string): Обединява масив от низове с разделител.strings.ToLower(s): Преобразува към малки букви.strings.ToUpper(s): Преобразува към големи букви.strings.TrimSpace(s): Премахва бели символи от началото и края.
-
Пакет
fmt: За форматиран изход и четене на низове. -
Пакет
strconv: За преобразуване на низове към числови типове и обратно.import "strconv" i, err := strconv.Atoi("123") // Низ към int s := strconv.Itoa(i) // Int към низ
Неизменяемостта на низовете е важна и означава, че всяка операция, която изглежда като модификация на низ (например, конкатенация или Replace), всъщност създава нов низ.