Строки и работа с текстом в Go 1.21: подробное руководство
Строки и работа с текстом в Go
Введение: Зачем нам работать с текстом?
В программировании мы постоянно имеем дело с текстом: названия NFT-токенов, хештеги в соцсетях, тексты песен, статьи для блога, сообщения для подписчиков. Компьютер хранит текст как последовательность символов. В языке Go для этого существует специальный тип данных — string (строка).
Строки можно сравнивать, соединять, разрезать на части, искать в них символы и слова, переворачивать. В этом разделе мы научимся всем этим операциям на примерах из жизни: как SMM-менеджер, блогер или техноблогер.
Основной синтаксис
1. Что такое строка?
Строка — это набор символов, заключённых в двойные кавычки " ".
package main
import "fmt"
func main() {
// Объявляем строки
var название string = "SuperGadget X"
хештег := "#ЛучшийДеньДляПрограммирования"
fmt.Println(название)
fmt.Println(хештег)
}
Вывод:
SuperGadget X
#ЛучшийДеньДляПрограммирования
2. Длина строки
Чтобы узнать, сколько символов в строке, используем встроенную функцию len().
package main
import "fmt"
func main() {
текстПесни := "Hello, world!"
длина := len(текстПесни)
fmt.Println("Длина строки:", длина)
}
Вывод:
Длина строки: 13
Важно: len() считает количество байт. Для английских букв это совпадает с количеством символов. Для русского текста (кириллицы) — нет, но для простых задач нам это пока не помешает.
3. Срез строки (получение части)
Мы можем взять часть строки — это называется срез (slice). Используем квадратные скобки с индексами: строка[начало:конец]. Нумерация символов начинается с 0.
package main
import "fmt"
func main() {
хештег := "#ЛучшийДеньДляПрограммирования"
// Берём первые 10 символов (индексы с 0 по 9)
часть := хештег[:10]
fmt.Println("Часть хештега:", часть)
// Берём с 5-го символа до конца
сПятого := хештег[5:]
fmt.Println("С 5-го символа:", сПятого)
// Берём символы с 3 по 7
отрезок := хештег[3:8]
fmt.Println("Отрезок:", отрезок)
}
Вывод:
Часть хештега: #ЛучшийД
С 5-го символа: йДеньДляПрограммирования
Отрезок: чший
4. Соединение строк (конкатенация)
Строки можно складывать с помощью знака +.
package main
import "fmt"
func main() {
первая := "Привет, "
вторая := "мир!"
результат := первая + вторая
fmt.Println(результат)
// Можно сразу соединять несколько
полное := "Я " + "люблю " + "Go!"
fmt.Println(полное)
}
Вывод:
Привет, мир!
Я люблю Go!
5. Поиск подстроки
Чтобы проверить, содержит ли строка другую строку, используем функцию strings.Contains(). Для этого нужно подключить пакет strings.
package main
import (
"fmt"
"strings"
)
func main() {
статья := "SuperGadget X — это лучший гаджет года!"
// Ищем слово "лучший"
естьЛи := strings.Contains(статья, "лучший")
fmt.Println("Содержит 'лучший':", естьЛи)
// Ищем слово "плохой"
естьЛиПлохой := strings.Contains(статья, "плохой")
fmt.Println("Содержит 'плохой':", естьЛиПлохой)
}
Вывод:
Содержит 'лучший': true
Содержит 'плохой': false
6. Разделение строки на слова
Функция strings.Split() разбивает строку на части по разделителю (например, по пробелу).
package main
import (
"fmt"
"strings"
)
func main() {
текстПесни := "Это лучшая песня в мире"
слова := strings.Split(текстПесни, " ")
fmt.Println("Количество слов:", len(слова))
fmt.Println("Список слов:", слова)
}
Вывод:
Количество слов: 5
Список слов: [Это лучшая песня в мире]
Разбор типичных задач
Задача 1: Хештег (SMM-менеджер)
Условие: Дан длинный хештег, например #ЛучшийДеньДляПрограммирования. Нужно взять только первые 10 символов (без решётки).
package main
import "fmt"
func main() {
хештег := "#ЛучшийДеньДляПрограммирования"
// Убираем первый символ (#) и берём следующие 10
часть := хештег[1:11] // с 1 по 10 (включительно)
fmt.Println("Короткий хештег:", часть)
}
Вывод:
Короткий хештег: ЛучшийДен
Задача 2: Количество слов в песне
Условие: Дан текст песни. Нужно подсчитать количество слов (слова разделены пробелами).
package main
import (
"fmt"
"strings"
)
func main() {
текстПесни := "Мы едем, едем, едем в далёкие края"
слова := strings.Split(текстПесни, " ")
количество := len(слова)
fmt.Println("Количество слов в песне:", количество)
}
Вывод:
Количество слов в песне: 7
Задача 3: Заключительная часть статьи
Условие: Есть длинная статья. Нужно взять последние 50 символов (заключение).
package main
import "fmt"
func main() {
статья := "SuperGadget X имеет потрясающий дизайн. Он работает быстро и надёжно. Рекомендую всем!"
длина := len(статья)
// Берём последние 20 символов
заключение := статья[длина-20:]
fmt.Println("Заключение статьи:", заключение)
}
Вывод:
Заключение статьи: Рекомендую всем!
Задача 4: Обратное сообщение (блогер)
Условие: Нужно перевернуть строку задом наперёд.
package main
import "fmt"
func main() {
сообщение := "Привет, подписчики!"
перевернутое := ""
// Проходим по строке с конца в начало
for i := len(сообщение) - 1; i >= 0; i-- {
перевернутое += string(сообщение[i])
}
fmt.Println("Оригинал:", сообщение)
fmt.Println("Перевёрнуто:", перевернутое)
}
Вывод:
Оригинал: Привет, подписчики!
Перевёрнуто: !икичсдипдоп ,тевирП
Частые ошибки новичков
- Забывают, что индексы начинаются с 0. Первый символ — это
строка[0], а нестрока[1]. - Выход за границы строки. Если строка длиной 10 символов, то последний индекс — 9. Обращение к
строка[10]вызовет ошибку. - Путают len() с количеством символов для кириллицы. Для русского текста
len()показывает количество байт, а не букв. Для простых задач это не критично, но помните об этом. - Забывают импортировать пакет strings. Функции
strings.Contains,strings.Splitдоступны только после добавленияimport "strings". - Пытаются изменить символ в строке. Строки в Go неизменяемы. Нельзя написать
строка[0] = 'A'. Нужно создавать новую строку.
Итоговый пример: NFT-токен
Представь, что ты создаёшь NFT-коллекцию. Название токена — "CosmicCat #007". Нужно проверить, что название содержит слово "Cat", взять первые 5 символов для превью и вывести всё в обратном порядке.
package main
import (
"fmt"
"strings"
)
func main() {
название := "CosmicCat #007"
// 1. Проверяем, содержит ли "Cat"
содержитКота := strings.Contains(название, "Cat")
fmt.Println("Содержит 'Cat':", содержитКота)
// 2. Берём первые 5 символов для превью
превью := название[:5]
fmt.Println("Превью:", превью)
// 3. Переворачиваем название
перевернутое := ""
for i := len(название) - 1; i >= 0; i-- {
перевернутое += string(название[i])
}
fmt.Println("Оригинал:", название)
fmt.Println("Перевёрнутое название:", перевернутое)
}
Вывод:
Содержит 'Cat': true
Превью: Cosmic
Оригинал: CosmicCat #007
Перевёрнутое название: 700# taCcimsoc
Теперь ты готов работать с текстом как настоящий программист! Помни: строки — это просто последовательность символов, и с ними можно делать всё что угодно: резать, склеивать, искать и переворачивать. Удачи в решении задач!