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

Ошибка bufio.ErrInvalidUnreadByte

Ошибка bufio.ErrInvalidUnreadByte возвращается методами UnreadByte буферизованного чтения, когда вы пытаетесь отменить чтение байта, но в буфере нет непрочитанных данных. Эта ошибка возникает, если вы вызываете UnreadByte после того, как предыдущая операция чтения завершилась неудачно, или если вы вызываете ее повторно без промежуточного чтения.

Синтаксис

err := bufio.ErrInvalidUnreadByte

Пример возникновения ошибки

Попробуем вызвать UnreadByte без предварительного чтения:

package main import ( "bufio" "fmt" "strings" ) func main() { reader := bufio.NewReader(strings.NewReader("abcde")) // Попытка отменить чтение без чтения байта err := reader.UnreadByte() if err != nil { fmt.Println(err) } }

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

"bufio: invalid use of UnreadByte"

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

Покажем, как правильно использовать UnreadByte после чтения:

package main import ( "bufio" "fmt" "strings" ) func main() { reader := bufio.NewReader(strings.NewReader("abcde")) // Читаем один байт b, err := reader.ReadByte() if err != nil { fmt.Println("Error reading:", err) return } fmt.Printf("Read byte: %c\n", b) // Теперь можно отменить чтение err = reader.UnreadByte() if err != nil { fmt.Println("Unread error:", err) return } fmt.Println("UnreadByte called successfully") // Читаем снова тот же байт b2, err := reader.ReadByte() if err != nil { fmt.Println("Error reading second time:", err) return } fmt.Printf("Read byte again: %c\n", b2) }

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

"Read byte: a" "UnreadByte called successfully" "Read byte again: a"

Пример ошибки при повторном вызове

Попробуем вызвать UnreadByte дважды подряд:

package main import ( "bufio" "fmt" "strings" ) func main() { reader := bufio.NewReader(strings.NewReader("abcde")) // Читаем один байт _, err := reader.ReadByte() if err != nil { fmt.Println("Error reading:", err) return } // Первый вызов UnreadByte - работает err = reader.UnreadByte() if err != nil { fmt.Println("First UnreadByte failed:", err) return } fmt.Println("First UnreadByte ok") // Второй вызов UnreadByte - вызовет ошибку err = reader.UnreadByte() if err != nil { fmt.Println("Second UnreadByte failed:", err) } }

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

"First UnreadByte ok" "Second UnreadByte failed: bufio: invalid use of UnreadByte"

Пример с проверкой на ошибку

Рекомендуется всегда проверять ошибку при вызове UnreadByte:

package main import ( "bufio" "fmt" "strings" ) func main() { reader := bufio.NewReader(strings.NewReader("12345")) // Читаем символ b, err := reader.ReadByte() if err != nil { fmt.Println("Error reading:", err) return } fmt.Printf("Read: %c\n", b) // Пытаемся отменить чтение с проверкой if err := reader.UnreadByte(); err != nil { if err == bufio.ErrInvalidUnreadByte { fmt.Println("Cannot unread: no byte was read") } else { fmt.Println("Other error:", err) } } else { fmt.Println("Unread successful") } }

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

"Read: 1" "Unread successful"

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

  • ошибку bufio.ErrInvalidUnreadRune,
    возникающую при попытке отменить чтение руны без предварительного чтения
  • метод bufio.Reader.UnreadByte,
    который отменяет последнее чтение байта
  • метод bufio.Reader.ReadByte,
    читающий один байт из буфера
  • метод bufio.Reader.Peek,
    позволяющий заглянуть в буфер без чтения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить