2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Go语言

Go语言使用切片读写文件

时间:03-07来源:作者:点击数:43

切片提供了 Go语言中处理 I/O 缓冲的标准方式,下面 cat 函数的第二版中,在一个切片缓冲内使用无限 for 循环(直到文件尾部 EOF)读取文件,并写入到标准输出(os.Stdout)。

  • func cat(f *os.File) {
  • const NBUF = 512
  • var buf [NBUF]byte
  • for {
  • switch nr, err := f.Read(buf[:]); true {
  • case nr < 0:
  • fmt.Fprintf(os.Stderr, "cat: error reading: %s\n", err.Error())
  • os.Exit(1)
  • case nr == 0: // EOF
  • return
  • case nr > 0:
  • if nw, ew := os.Stdout.Write(buf[0:nr]); nw != nr {
  • fmt.Fprintf(os.Stderr, "cat: error writing: %s\n", ew.Error())
  • }
  • }
  • }
  • }

下面的代码使用了 os 包中的 os.file 和 Read 方法;与上一节示例代码具有同样的功能。

  • package main
  • import (
  • "flag"
  • "fmt"
  • "os"
  • )
  • func cat(f *os.File) {
  • const NBUF = 512
  • var buf [NBUF]byte
  • for {
  • switch nr, err := f.Read(buf[:]); true {
  • case nr < 0:
  • fmt.Fprintf(os.Stderr, "cat: error reading: %s\n", err.Error())
  • os.Exit(1)
  • case nr == 0: // EOF
  • return
  • case nr > 0:
  • if nw, ew := os.Stdout.Write(buf[0:nr]); nw != nr {
  • fmt.Fprintf(os.Stderr, "cat: error writing: %s\n", ew.Error())
  • }
  • }
  • }
  • }
  • func main() {
  • flag.Parse() // 扫描arg列表并设置标志
  • if flag.NArg() == 0 {
  • cat(os.Stdin)
  • }
  • for i := 0; i < flag.NArg(); i++ {
  • f, err := os.Open(flag.Arg(i))
  • if f == nil {
  • fmt.Fprintf(os.Stderr, "cat: can't open %s: error %s\n", flag.Arg(i), err)
  • os.Exit(1)
  • }
  • cat(f)
  • f.Close()
  • }
  • }

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门