Go – Read File Word by Word with bufio & Examples (2025 Guide)
Introduction – Why Read a File by Word?
Reading a file word by word is a common need in text analysis, tokenization, or building search engines. Go provides a powerful and memory-efficient way to achieve this using the bufio.Scanner with the ScanWords split function.
In this guide, you’ll learn:
- How to read a file word-by-word using
bufio.Scanner - Use the
ScanWordsfunction for tokenization - Handle file reading safely and efficiently
- Real-world applications like word count and indexing
Example – Read File Word by Word
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("sample.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanWords) // Split by words
for scanner.Scan() {
word := scanner.Text()
fmt.Println(word)
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
Output Example (for a file containing):
Go is awesome
Go
is
awesome
This code:
- Opens the file
- Scans word by word using
bufio.ScanWords - Prints each word to the terminal
How bufio.ScanWords Works
ScanWordssplits input based on space, newline, or tab- It’s a built-in splitter for scanners in Go
- Alternative: Use
bufio.ScanLinesfor line-by-line reading
Best Practices
| Practice | Why It Helps |
|---|---|
Always check scanner.Err() | Captures scanning errors |
Use defer file.Close() | Ensures proper file closure |
| Don’t load entire file | Streaming with scanner avoids memory issues |
| Validate file existence | Avoids unexpected crashes |
Summary – Recap & Next Steps
Go makes reading files word-by-word easy and efficient with bufio.Scanner and ScanWords. It’s perfect for text processing, tokenization, or content analysis without overloading memory.
Key Takeaways:
- Use
bufio.NewScannerwithScanWordsto read by word - Handle errors and always close files with
defer - Efficient even for large files
Next: Explore Counting Word Frequency, Building a Word Index, or Stop Word Removal in Go.
FAQs – Go Read File by Word
What is ScanWords in Go?
It’s a split function for bufio.Scanner that separates text into words.
How do I read a file without loading it entirely into memory?
Use bufio.Scanner—it reads the file in chunks, not all at once.
Can I customize how words are split?
Yes. You can write a custom split function using scanner.Split().
What happens if the file doesn’t exist?
os.Open() will return an error. Always check and handle it.
Is this method suitable for large files?
Yes. It streams the content efficiently using buffered reading.
Share Now :
