Метод bufio.Scanner.Err
Метод bufio.Scanner.Err возвращает ошибку, которая произошла во время последнего вызова метода Scan. Если сканирование завершилось успешно, метод возвращает nil. Если во время сканирования произошла ошибка, метод вернет соответствующую ошибку, например, io.EOF при достижении конца данных или bufio.ErrTooLong при превышении максимальной длины токена.
Синтаксис
scanner.Err()
Пример
Рассмотрим базовый пример использования метода Err для проверки ошибок при сканировании строк:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "line1\nline2\nline3"
scanner := bufio.NewScanner(strings.NewReader(data))
for scanner.Scan() {
text := scanner.Text()
fmt.Println(text)
}
if err := scanner.Err(); err != nil {
fmt.Println("Error occurred:", err)
}
}
Результат выполнения кода:
line1
line2
line3
Пример
Рассмотрим случай, когда при сканировании возникает ошибка из-за превышения максимальной длины токена:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
// Создаем строку с длинным словом
longWord := strings.Repeat("a", bufio.MaxScanTokenSize+1)
scanner := bufio.NewScanner(strings.NewReader(longWord))
scanner.Scan()
if err := scanner.Err(); err != nil {
fmt.Println("Error:", err)
}
}
Результат выполнения кода:
"Error: bufio.Scan: token too long"
Пример
Метод Err часто используется в паре с методом Scan для обработки ошибок после завершения цикла сканирования:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "word1 word2 word3"
scanner := bufio.NewScanner(strings.NewReader(data))
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
fmt.Println("Token:", scanner.Text())
}
if scanner.Err() != nil {
fmt.Println("Scanning finished with error:", scanner.Err())
} else {
fmt.Println("Scanning finished successfully")
}
}
Результат выполнения кода:
Token: word1
Token: word2
Token: word3
"Scanning finished successfully"
Смотрите также
-
метод
bufio.Scanner.Scan,
который выполняет сканирование следующего токена -
метод
bufio.Scanner.Text,
который возвращает текущий токен в виде строки -
метод
bufio.Scanner.Bytes,
который возвращает текущий токен в виде байтового среза -
константу
bufio.ErrTooLong,
которая возникает при превышении максимальной длины токена