Функция bufio.ScanRunes
Функция bufio.ScanRunes является функцией разделения
(split function) для bufio.Scanner. Она определяет
правило, по которому сканер будет разбивать входные данные
на токены. В отличие от ScanLines или ScanWords,
эта функция разбивает данные по рунам (Unicode code points),
возвращая каждый символ как отдельный токен.
Функция не принимает параметров и используется исключительно
в качестве значения для метода Split сканера.
Синтаксис
scanner.Split(bufio.ScanRunes)
Пример использования
Давайте прочитаем строку "Hello, 世界" по рунам с помощью
bufio.ScanRunes:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "Hello, 世界"
scanner := bufio.NewScanner(strings.NewReader(data))
scanner.Split(bufio.ScanRunes)
for scanner.Scan() {
token := scanner.Text()
fmt.Printf("%q ", token)
}
}
Результат выполнения кода:
"H" "e" "l" "l" "o" "," " " "世" "界"
Пример с обработкой ошибок
При работе со сканером важно проверять наличие ошибок после завершения цикла. Рассмотрим пример:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "abcde"
scanner := bufio.NewScanner(strings.NewReader(data))
scanner.Split(bufio.ScanRunes)
for scanner.Scan() {
token := scanner.Text()
fmt.Println(token)
}
if err := scanner.Err(); err != nil {
fmt.Printf("Error: %v\n", err)
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример с многобайтовыми символами
Функция корректно обрабатывает многобайтовые символы Unicode, такие как эмодзи или иероглифы. Давайте посмотрим на примере:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "🚀🌟⭐"
scanner := bufio.NewScanner(strings.NewReader(data))
scanner.Split(bufio.ScanRunes)
var tokens []string
for scanner.Scan() {
tokens = append(tokens, scanner.Text())
}
fmt.Printf("Runes: %v\n", tokens)
fmt.Printf("Count: %d\n", len(tokens))
}
Результат выполнения кода:
"Runes: [🚀 🌟 ⭐]"
"Count: 3"
Смотрите также
-
функцию
bufio.ScanLines,
которая разбивает данные на строки -
функцию
bufio.ScanWords,
которая разбивает данные на слова -
функцию
bufio.ScanBytes,
которая разбивает данные на байты -
метод
bufio.Scanner.Split,
который устанавливает функцию разделения для сканера