Как може да се работи със стрингове в езика Go?
sobes.tech AI
Отговор от AI
Стрингът в Go е неизменяема последователност от байтове. Той може да представлява както UTF-8 текст, така и произволни двоични данни.
Основните начини за работа:
-
Деклариране и инициализация:
var s1 string // Празен стринг s2 := "здравей" // Инициализация с литерал s3 := `многострочен стринг` // Необработен литерал -
Дължина на стринга:
len(s2) // Дължина в байтове. За "здравей" е 7. -
Достъп до байтове:
b := s2[0] // Вземане на байт по индекс. Връща 'з' (в UTF-8).Достъпът до байтове не гарантира получаване на цял символ UTF-8.
-
Достъп до руни (UTF-8 символи): Стрингът може да бъде итеративно обходен по руни:
for index, runeValue := range s2 { fmt.Printf("Индекс: %d, Руна: %c\n", index, runeValue) }Дължина в руни:
utf8.RuneCountInString(s2) // Дължина в руни. За "здравей" е 7. -
Конкатенация на стрингове:
str1 := "здравей" str2 := " свят" result := str1 + str2 // Конкатенация с +За ефективно съединяване на много стрингове използвайте
strings.Builder.var sb strings.Builder sb.WriteString("здравей") sb.WriteString(" ") sb.WriteString("свят") result := sb.String() // Получаване на крайния стринг -
Конвертиране между стрингове и срезове от байтове/руни:
byteslice := []byte(s2) // Стринг към срез от байтове rs := []rune(s2) // Стринг към срез от руни backToString := string(byteslice) // Байтов срез към стринг backToString = string(rs) // Рунен срез към стринг -
Пакет
strings: Предоставя много полезни функции:Contains,HasPrefix,HasSuffixIndex,LastIndexReplace,ToUpper,ToLower,Trim,TrimSpaceSplit,Join
-
Пакет
strconv: За преобразуване на стрингове към други типове данни (числа, булеви) и обратно.i, err := strconv.Atoi("123") // Стринг към int s := strconv.Itoa(456) // Int към стринг -
Неизменяемост: Всяка операция, която изглежда като промяна на стринг (например, съединяване), всъщност създава нов стринг. Това е важно за производителността при чести промени. В такива случаи е по-добре да използвате
[]byteилиstrings.Builder.