Часто слово «руны» вызывает ассоциации с магическими символами, но в контексте программирования всё куда прозаичнее — это просто ещё один важный тип данных, без которого невозможна корректная работа с текстом на разных языках. В данной статье мы разберёмся, что такое руны в Go (и не только), зачем они нужны и, главное, где бесплатно научиться ими пользоваться;
Что такое руны и зачем они нужны
В Go существует два основных типа для работы с текстом:
- byte — псевдоним для
uint8, хранит один байт; - rune — псевдоним для
int32, хранит один Unicode-кодовый пункт.
Почему этого мало одними байтами? Потому что символ «ё» или «Ω» занимает больше одного байта в кодировке UTF-8. Если работать только с байтами, легко обрезать символ «наполовину» и получить кракозябры вместо текста. Вот тут-то и приходят руны на помощь.
Минимальный пример на Go
package main
import (
"fmt"
"unicode/utf8"
)
func main {
s := "Привет, " // русский + китайский
fmt.Println("Байтов:", len(s)) // 18
fmt.Println("Рун:", utf8.RuneCountInString(s)) // 10
}
Видите разницу? len(s) считает байты, а utf8.RuneCountInString — именно руны, то есть полноценные символы.
Где учиться бесплатно: подборка курсов и материалов
Ниже собраны актуальные бесплатные ресурсы, где можно познакомиться с рунами и смежными темами (типы данных, строки, пакет strings, обработка ошибок, интерфейсы и другое).
Официальные туториалы Go
- A Tour of Go — официальный интерактивный тур на русском.
Курсы для детей и взрослых
На Kursfinder.ru собраны лучшие бесплатные и условно-бесплатные курсы по программированию на Go и смежным дисциплинам. Например:
- «Go: первые шаги» — бесплатный модуль на Stepik, охватывает строки, руны, слайсы.
- «Backend на Go с нуля до Junior» — бесплатный базовый курс от Mail.ru, включает темы:
- работа с UTF-8
- пакет
strings - интерфейсы и обобщения (generics)
- «Программирование для детей» — игровые курсы, где руны подаются как «волшебные символы».
Книги и онлайн-справочники
- «Go. Практика программирования» — перевод официального мануала на русском.
- Free Programming Books — репозиторий бесплатных книг (включая русские переводы по Go).
- Go Blog: Strings, bytes, runes — статья от создателей языка.
Как практиковаться без вложений
Локальная установка Go
1. Скачайте дистрибутив с официального сайта go.dev/dl — всё бесплатно.
2. Настройте GOPATH (Go 1.20+ делает это автоматически).
3. Создайте файл main.go и вводите примеры с этой статьи.
Онлайн-песочницы
- Go Playground — запуск кода прямо в браузере, не требует установки.
- Replit — можно делать шаринг кода и приглашать друзей.
Расширенные темы: от рун к интерфейсам и обобщениям
Когда вы освоите базовые операции с рунами, логично перейти к более «взрослым» темам:
Структуры и методы
type TextProcessor struct {
source string
}
func (tp *TextProcessor) RuneCount int {
return utf8.RuneCountInString(tp.source)
}
Интерфейсы
type Counter interface {
RuneCount int
}
Обобщенное программирование (generics)
func CountRunes[T ~string](s T) int {
return utf8.RuneCountInString(string(s))
}
Всё это можно изучать по тем же бесплатным курсам выше.
Обработка ошибок, паника и восстановление
Работа с рунами иногда заканчивается ошибкой: например, входной текст может быть некорректен в UTF-8. В Go есть идиоматичный подход:
r, size := utf8.DecodeRuneInString(s)
if r == utf8.RuneError {
log.Println("Невалидная UTF-8 последовательность")
}
А чтобы не «упасть» при панике, используйте recover внутри defer.
- Начните с официального тура, это быстро и бесплатно.
- Решайте практические задачи на Stepik или LeetCode (есть задачи на подсчёт рун).
- Читайте исходники стандартной библиотеки (пакет
stringsиunicode/utf8). - Не бойтесь экспериментировать в Go Playground и делиться результатами в Telegram-чатах Go-разработчиков.
Помните: руны — это не магия, а инструмент. Пользуйтесь им осознанно, и ваш код будет поддерживать тексты на любом языке мира, не теряя ни одного символа. Удачи в бесплатном обучении!