РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
710 of 1593 menu

Метод bufio.Scanner.Bytes

Метод Bytes структуры bufio.Scanner возвращает текущий токен, полученный после вызова метода Scan, в виде среза байт. Этот метод полезен, когда вам нужно работать с данными как с байтами, а не как со строкой. Возвращаемый срез является ссылкой на внутренний буфер сканера, поэтому его данные могут быть изменены при следующем вызове Scan.

Синтаксис

scanner.Bytes() []byte

Пример использования с разделителем по словам

Давайте разберем базовый пример использования метода Bytes для получения токенов из строки, разделенных пробелами:

package main import ( "bufio" "fmt" "strings" ) func main() { str := "hello world go" scanner := bufio.NewScanner(strings.NewReader(str)) scanner.Split(bufio.ScanWords) for scanner.Scan() { token := scanner.Bytes() fmt.Printf("%s ", token) } }

Результат выполнения кода:

"hello world go "

Пример с разделением по строкам

Рассмотрим пример использования метода Bytes для чтения построчного вывода программы:

package main import ( "bufio" "fmt" "strings" ) func main() { str := "first line\nsecond line\nthird line" scanner := bufio.NewScanner(strings.NewReader(str)) for scanner.Scan() { line := scanner.Bytes() fmt.Printf("Line: %s\n", line) } }

Результат выполнения кода:

"Line: first line" "Line: second line" "Line: third line"

Пример получения среза байт и его копирования

Важно помнить, что срез, возвращаемый методом Bytes, является ссылкой на внутренний буфер. Если нужно сохранить данные для последующего использования, следует сделать их копию:

package main import ( "bufio" "fmt" "strings" ) func main() { str := "data1 data2 data3" scanner := bufio.NewScanner(strings.NewReader(str)) scanner.Split(bufio.ScanWords) var tokens [][]byte for scanner.Scan() { token := scanner.Bytes() copyToken := make([]byte, len(token)) copy(copyToken, token) tokens = append(tokens, copyToken) } for _, token := range tokens { fmt.Printf("%s ", token) } }

Результат выполнения кода:

"data1 data2 data3 "

Пример сравнения с методом Text

Покажем разницу между методами Bytes и Text. Первый возвращает срез байт, а второй - строку:

package main import ( "bufio" "fmt" "strings" ) func main() { str := "12345" scanner := bufio.NewScanner(strings.NewReader(str)) scanner.Split(bufio.ScanRunes) for scanner.Scan() { b := scanner.Bytes() t := scanner.Text() fmt.Printf("Bytes: %v, Text: %s\n", b, t) } }

Результат выполнения кода:

"Bytes: [49], Text: 1" "Bytes: [50], Text: 2" "Bytes: [51], Text: 3" "Bytes: [52], Text: 4" "Bytes: [53], Text: 5"

Смотрите также

  • метод bufio.Scanner.Scan,
    который выполняет сканирование следующего токена
  • метод bufio.Scanner.Text,
    который возвращает текущий токен как строку
  • метод bufio.Scanner.Split,
    который устанавливает функцию разделения токенов
  • метод bufio.Scanner.Err,
    который возвращает ошибку сканера, если она возникла
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить