Clive B.
—I don’t know how to read a file line by line in Go.
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:
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) } }
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:
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:
This is some example text.
Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.
SEE EPISODESConsidered “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.