Практические примеры использования Bufio Scanner
bufio.Scanner
в Golang - это универсальный инструмент, который можно применять для широкого спектра задач обработки ввода. Давайте рассмотрим несколько практических примеров, чтобы продемонстрировать его возможности.
Чтение из файла
Одним из распространенных сценариев использования bufio.Scanner
является чтение данных из файла. Это особенно полезно при работе с большими файлами, так как механизм буферизации bufio.Scanner
может повысить производительность.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, _ := os.Open("input.txt")
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
fmt.Println(line)
}
if err := scanner.Err(); err!= nil {
fmt.Fprintln(os.Stderr, "error:", err)
}
}
В этом примере мы создаем bufio.Scanner
, который читает данные из файла с именем "input.txt". Метод scanner.Scan()
используется для чтения каждой строки файла, а метод scanner.Text()
извлекает содержимое текущей строки.
Обработка аргументов командной строки
bufio.Scanner
также можно использовать для обработки аргументов командной строки, что полезно при создании инструментов или скриптов для командной строки.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
arg := scanner.Text()
fmt.Println("Argument:", arg)
}
if err := scanner.Err(); err!= nil {
fmt.Fprintln(os.Stderr, "error:", err)
}
}
В этом примере bufio.Scanner
читает ввод из стандартного ввода (os.Stdin
), что позволяет пользователю вводить аргументы командной строки. Затем каждый аргумент выводится на консоль.
Парсинг разделенных данных
bufio.Scanner
также можно использовать для парсинга данных, разделенных определенным символом или шаблоном, таких как CSV - файлы или файлы с разделением табуляцией.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
file, _ := os.Open("data.csv")
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
line := scanner.Text()
fields := strings.Split(line, ",")
fmt.Println("Fields:", fields)
}
if err := scanner.Err(); err!= nil {
fmt.Fprintln(os.Stderr, "error:", err)
}
}
В этом примере мы создаем bufio.Scanner
, который читает данные из CSV - файла с именем "data.csv". Мы настраиваем сканер на использование функции разделения bufio.ScanLines
, которая разбивает ввод на отдельные строки. Затем мы разбиваем каждую строку по запятой, чтобы извлечь отдельные поля.
Эти примеры демонстрируют универсальность bufio.Scanner
и то, как его можно применять для различных задач обработки ввода в Golang. Используя его эффективную буферизацию и настраиваемые функции разделения, вы можете создать надежные и производительные решения для обработки ввода в своих приложениях.