Skip to content

Instantly share code, notes, and snippets.

@tomcatzh
Created April 1, 2015 06:35
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save tomcatzh/5d1d0d9a95cecba798d1 to your computer and use it in GitHub Desktop.
Save tomcatzh/5d1d0d9a95cecba798d1 to your computer and use it in GitHub Desktop.
Golang readline and writeline
func readLines(path string) ([]string, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var lines []string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
return lines, scanner.Err()
}
// writeLines writes the lines to the given file.
func writeLines(lines []string, path string) error {
file, err := os.Create(path)
if err != nil {
return err
}
defer file.Close()
w := bufio.NewWriter(file)
for _, line := range lines {
fmt.Fprintln(w, line)
}
return w.Flush()
}
@tvonhacht
Copy link

replace

fmt.Fprintln(w, line)

with

writer.WriteString(line)

@logrusorgru
Copy link

TheFprintln adds \n or \r\n depending on OS. But the WriteString doesn't.

var nl = fmt.Sprintln() // new line, depending on OS

// [...]

w.WriteString(line)
w.WriteString(nl)

@logrusorgru
Copy link

Hah. It seems Go every time uses \n. Interesting.
Thus,

w.WriteString(line)
w.WrieByte('\n')

@alisher-matkurbanov
Copy link

why you don't handle err from fmt.Fprintln(w, line)?
wouldn't it be better to write like this

...
for _, line := range lines {
    _, err = fmt.Fprintln(w, line)
    if err != nil {
        return err
    }
}
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment