多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 读取文件 ### ioutil.ReadFile(")读取整个文件 ~~~go ioutil.ReadFile("/home/naveen/go/src/filehandling/test.txt") // 绝对路径 ~~~ ### 分块读取文件 当文件非常大时,尤其在 RAM 存储量不足的情况下,把整个文件都读入内存是没有意义的。更好的方法是分块读取文件。这可以使用bufio包来完成 ~~~go func main() { fptr := flag.String("fpath", "test.txt", "file path to read from") flag.Parse() f, err := os.Open(*fptr) if err != nil { log.Fatal(err) } defer func() { if err = f.Close(); err != nil { log.Fatal(err) } }() r := bufio.NewReader(f) // 缓冲读取器(buffered reader) b := make([]byte, 3) for { _, err := r.Read(b) if err != nil { fmt.Println("Error reading file:", err) break } fmt.Println(string(b)) } } ~~~ ### 逐行读取文件 ~~~go func main() { fptr := flag.String("fpath", "test.txt", "file path to read from") flag.Parse() f, err := os.Open(*fptr) if err != nil { log.Fatal(err) } defer func() { if err = f.Close(); err != nil { log.Fatal(err) } }() s := bufio.NewScanner(f) for s.Scan() { fmt.Println(s.Text()) } err = s.Err() if err != nil { log.Fatal(err) } } ~~~ ### 将文件绑定在二进制文件中 packr包可以将文本文件捆绑在二进制文件; ~~~bash go get -u github.com/gobuffalo/packr/... ~~~ `packr`会把静态文件(例如`.txt`文件)转换为`.go`文件,接下来`.go`文件会直接嵌入到二进制文件中;packr 非常智能,在开发阶段可以从磁盘加载文件 示例: ~~~go func main() { box := packr.NewBox("../filehandling") data := box.String("test.txt") fmt.Println("Contents of file:", data) } ~~~ ~~~bash $ go install filehandling $ packr install -v filehandling $ ./filehandling ~~~