Go中的IO操作

69 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

文章概览

  • 读写文件操作
  • 命令行参数

写文件操作

 os.OpenFile是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可以用于I/O操作,如果出错,错误底层数据类型是*PathError。

写文件的方式

方式一

  • 创建一个新文件,谢写入内容。
  • 打开一个已存在的文件,把原来的内容覆盖成为新的内容。
  • 打开一个已存在的文件,在原来的内容追加内容。

f1, err1 := OpenFile("./output1.txt")
if err1 != nil {
    log.Fatal(err1.Error())
}
defer f1.Close()
n, err1 := io.WriteString(f1, "测试文件1") //写入文件(字符串)
if err1 != nil {
    log.Fatal(err1.Error())
}
fmt.Printf("写入 %d 个字节\n", n)

  • 使用defer file.Close()及时关闭file句柄。
  • 写入时,使用带缓存的*Writer
  • 因为writer是带缓存的,因此在调用WriterString方法时,其实内容是先写入到缓存中的,所以需要调用Flush方法,将缓冲区的数据真正的写入到文件中,否则文件中没有数据。

命令行参数的使用

 有时候需要获取到命令行输入的各种参数,这时候就要用到命令行参数,os.Args是一个string的切片,用来存储所有的命令行参数。

flag包解析命令行参数

 前面的方式是比较原生的方式,对解析参数不是特别的方便,特别是带有指定参数形式的命令行。而使用flag包可以轻松的实现解析命令行参数,并且参数的顺序也可以随意。

func main() {   	
	 if len(os.Args)<0{
    		 return   
         }    
     	 fmt.Printf("====%s====\n", os.Args[1])   
      	 fmt.Printf("====%s====\n", os.Args[2])   
       	 fmt.Printf("====%s====\n", os.Args[3])    
       	 fmt.Printf("%s\n", os.Args)
}