Go Package bufio: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
Line 29: Line 29:
</syntaxhighlight>
</syntaxhighlight>
==With <tt>Reader</tt>==
==With <tt>Reader</tt>==
<code>ReadLine()</code> returns <code>[[Go_Package_io#io.EOF|io.EOF]]</code> on end of file.
<syntaxhighlight lang='go'>
f, err := os.Open(...)
r := bufio.NewReader(f)
for {
lineb, _, err := r.ReadLine()
if err != nil {
if errors.Is(err, io.EOF) {
fmt.Printf("is End of File!\n")
        } else {
    fmt.Printf("%v\n", err)
}
break
} else {
fmt.Printf("%s\n", string(lineb))
}
}
</syntaxhighlight>

Latest revision as of 21:22, 29 February 2024

External

Internal

Overview

The bufio package is aimed at buffering input in something faster (memory) while interacting with something slower (disk). bufio is useful in situations when queueing improves the overall system performance.

Reading a Text File Line by Line

With Scanner

import (
	"bufio"
	"os"
)

f, err := os.Open("/Users/ovidiu/tmp/sometext.txt")
if err != nil {
  ...
}
defer f.Close()
scanner := bufio.NewScanner(f)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
  line := scanner.Text()
  ...
}

With Reader

ReadLine() returns io.EOF on end of file.

f, err := os.Open(...)
r := bufio.NewReader(f)
for {
	lineb, _, err := r.ReadLine()
	if err != nil {
		if errors.Is(err, io.EOF) {
			fmt.Printf("is End of File!\n")
        } else {
		    fmt.Printf("%v\n", err)
		}
		break
	} else {
		fmt.Printf("%s\n", string(lineb))
	}
}