Lección 19 · 19 de 20
Escribir y leer archivos · Go
Escriba y lea archivos de texto en Go con el paquete os: WriteFile, OpenFile para añadir, Open con bufio.Scanner y defer para cerrar.

os.WriteFile crea un archivo (o lo sustituye si ya existía) con el contenido que se le pase, convertido en bytes con []byte(notes). 0644 son los permisos del archivo en sistemas tipo Unix: lectura y escritura para usted, solo lectura para los demás. El nombre notes.txt, sin carpeta, lo deja en la carpeta actual.
Casi todo lo que toca archivos puede fallar, así que devuelve un error. La función check evita repetir la misma comprobación: si err no es nil, lo escribe y termina el programa con os.Exit(1).
Para añadir sin borrar lo que hay, os.OpenFile abre el archivo con os.O_APPEND|os.O_WRONLY: escribir al final y solo escribir. fmt.Fprintln(f, ...) funciona como Println, pero escribe en el archivo f. Después, f.Close() lo cierra.
os.Open abre el archivo para leerlo y un bufio.Scanner, como el de la lección 5, lo recorre línea a línea: for n := 1; scanner.Scan(); n++ numera las líneas mientras queden. `defer` aplaza file.Close() hasta que termina main; es la forma habitual de no olvidarse de cerrar un archivo. Para leerlo entero de una vez también existe os.ReadFile.
Código · main.go
package mainimport ( "bufio" "fmt" "os")// check stops the program if something went wrong.func check(err error) { if err != nil { fmt.Println("Error:", err) os.Exit(1) }}func main() { // WriteFile creates (or replaces) a file in the current folder. notes := "Buy bread\nCall the plumber\nWater the plants\n" check(os.WriteFile("notes.txt", []byte(notes), 0644)) // OpenFile with O_APPEND adds lines at the end. f, err := os.OpenFile("notes.txt", os.O_APPEND|os.O_WRONLY, 0644) check(err) fmt.Fprintln(f, "Pay the electricity bill") f.Close() // Open + bufio.Scanner reads it back line by line. file, err := os.Open("notes.txt") check(err) defer file.Close() // runs when main ends scanner := bufio.NewScanner(file) for n := 1; scanner.Scan(); n++ { fmt.Printf("%d. %s\n", n, scanner.Text()) }}Salida · go run main.go
1. Buy bread 2. Call the plumber 3. Water the plants 4. Pay the electricity bill
Para recordar
os.WriteFilecrea o sustituye un archivo.os.OpenFileconos.O_APPENDañade al final.fmt.Fprintln(f, ...)escribe en un archivo.os.Openybufio.Scannerleen línea a línea.defer f.Close()cierra el archivo al terminar la función.
Ejercicio
Escriba un archivo prices.txt con un precio por línea, léalo con un Scanner, convierta cada línea con strconv.ParseFloat y escriba la suma.