The bufio package in Go provides buffered I/O operations, allowing efficient reading and writing of data, especially when dealing with streams of data like files or network connections. Here's a simplified overview along with examples explaining its usage:
1. Reading from a file using bufio.Reader:
import ("bufio""os")funcreadFromFile(filename string) error { file, err := os.Open(filename)if err !=nil {return err }defer file.Close()// Create a bufio.Reader to efficiently read from the file reader := bufio.NewReader(file)for {// Read bytes until newline or EOF line, err := reader.ReadString('\n')if err !=nil {break// EOF or error }// Process the line// Example: fmt.Println(line) }returnnil}
2. Writing to a file using bufio.Writer:
import ("bufio""os")funcwriteToFile(filename string, data []byte) error { file, err := os.Create(filename)if err !=nil {return err }defer file.Close()// Create a bufio.Writer to efficiently write to the file writer := bufio.NewWriter(file)// Write data to the file _, err = writer.Write(data)if err !=nil {return err }// Ensure all buffered data is written to the file err = writer.Flush()if err !=nil {return err }returnnil}
3. Reading from standard input using bufio.Scanner:
import ("bufio""fmt""os")funcreadFromStdin() { scanner := bufio.NewScanner(os.Stdin)// Scan through each line of inputfor scanner.Scan() { line := scanner.Text()// Process the input line// Example: fmt.Println(line) }if err := scanner.Err(); err !=nil { fmt.Println("Error reading standard input:", err) }}
4. Writing to standard output using bufio.Writer:
import ("bufio""fmt""os")funcwriteToStdout(data string) { writer := bufio.NewWriter(os.Stdout)// Write data to standard output _, err := writer.WriteString(data)if err !=nil { fmt.Println("Error writing to stdout:", err) }// Ensure all buffered data is written to stdout err = writer.Flush()if err !=nil { fmt.Println("Error flushing buffer:", err) }}