आप उस के लिए bufio पैकेज के साथ os.File (जो io.Reader इंटरफ़ेस को लागू करता है) का उपयोग कर सकते हैं । हालांकि, उन पैकेजों को निश्चित मेमोरी उपयोग को ध्यान में रखते हुए बनाया जाता है (फाइल कितनी भी बड़ी क्यों न हो) और काफी तेज हैं।
दुर्भाग्य से यह पूरी फाइल को मेमोरी में थोड़ा और जटिल बनाता है। यदि वे लाइन की सीमा से अधिक हैं, तो आप लाइन के कुछ हिस्सों को जोड़ने के लिए बाइट्स का उपयोग कर सकते हैं । वैसे भी, मैं आपको अपनी परियोजना में सीधे लाइन रीडर का उपयोग करने की कोशिश करने की सलाह देता हूं (विशेषकर यदि यह नहीं पता है कि पाठ फ़ाइल कितनी बड़ी है!)। लेकिन अगर फ़ाइल छोटी है, तो निम्न उदाहरण आपके लिए पर्याप्त हो सकता है:
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)
}
}
एक अन्य विकल्प io.ioutil.ReadAll का उपयोग करके एक ही बार में पूरी फ़ाइल में पढ़ा जा सकता है और लाइन द्वारा स्लाइस करना है। मैं आपको इस बात का स्पष्ट उदाहरण नहीं देता कि कैसे फ़ाइल में लाइनों को लिखा जाए, लेकिन यह मूल रूप os.Create()
से उदाहरण में एक के समान लूप द्वारा पीछा किया जाता है (देखें main()
)।