Anda dapat menggunakan os.File (yang mengimplementasikan antarmuka io.Reader ) dengan paket bufio untuk itu. Namun, paket-paket tersebut dibangun dengan mempertimbangkan penggunaan memori tetap (tidak peduli seberapa besar file tersebut) dan cukup cepat.
Sayangnya hal ini membuat pembacaan seluruh file ke dalam memori menjadi sedikit lebih rumit. Anda dapat menggunakan bytes.Buffer untuk bergabung dengan bagian-bagian baris jika melebihi batas baris. Bagaimanapun, saya sarankan Anda untuk mencoba menggunakan pembaca baris secara langsung dalam proyek Anda (terutama jika tidak tahu seberapa besar file teksnya!). Tetapi jika filenya kecil, contoh berikut mungkin cukup untuk Anda:
package main
import (
"os"
"bufio"
"bytes"
"fmt"
)
// Read a whole file into the memory and store it as array of lines
func readLines(path string) (lines []string, err os.Error) {
var (
file *os.File
part []byte
prefix bool
)
if file, err = os.Open(path); err != nil {
return
}
reader := bufio.NewReader(file)
buffer := bytes.NewBuffer(make([]byte, 1024))
for {
if part, prefix, err = reader.ReadLine(); err != nil {
break
}
buffer.Write(part)
if !prefix {
lines = append(lines, buffer.String())
buffer.Reset()
}
}
if err == os.EOF {
err = nil
}
return
}
func main() {
lines, err := readLines("foo.txt")
if err != nil {
fmt.Println("Error: %s\n", err)
return
}
for _, line := range lines {
fmt.Println(line)
}
}
Alternatif lain mungkin menggunakan io.ioutil.ReadAll untuk membaca file lengkap sekaligus dan melakukan pemotongan per baris sesudahnya. Saya tidak memberi Anda contoh eksplisit tentang cara menulis baris kembali ke file, tetapi pada dasarnya itu os.Create()diikuti oleh loop yang mirip dengan yang ada di contoh (lihat main()).