📂 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 :
