Sentry Answers>Go>

Reading a file line by line in Go

Reading a file line by line in Go

Clive B.

The Problem

I don’t know how to read a file line by line in Go.

The Solution

In Go, you can use the bufio.Scanner function, which accepts an io.Reader interface, to read lines separated by a newline.

Files opened using os.Open satisfy the io.Reader interface.

The following code prints file contents line by line:

Click to Copy
package main import ( "bufio" "fmt" "log" "os" ) func main() { file, err := os.Open("/path/to/file.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { // This will print the file contents line by line. fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } }

Advanced Usage

If you want to scan through a file and split its contents by something other than newlines, you can specify a custom split function. Go supplies a few custom split functions in the standard library, namely bufio.ScanBytes, bufio.ScanLines, bufio.ScanRunes, and bufio.ScanWords.

For example, you can split a text by spaces so that each space-separated word is printed individually:

Click to Copy
package main import ( "bufio" "bytes" "fmt" "log" ) func main() { words := bytes.NewReader([]byte("This is some example text.")) scanner := bufio.NewScanner(words) scanner.Split(bufio.ScanWords) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } }

This prints:

Click to Copy
This is some example text.

Further Reading

  • The Go bufio package
  • The Reader interface in the Go io package
  • The Open function in the Go os package
  • The Newline Wikipedia entry
  • SentryGo Error Tracking and Performance Monitoring
  • Syntax.fmListen to the Syntax Podcast
  • Syntax.fm logo
    Listen to the Syntax Podcast

    Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.

    SEE EPISODES

Considered “not bad” by 4 million developers and more than 100,000 organizations worldwide, Sentry provides code-level observability to many of the world’s best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.

© 2025 • Sentry is a registered Trademark of Functional Software, Inc.