*** 作文件是任何编程语言都绕不过,要掌握一门语言,知道如何 *** 作文件是必不可少的,今天学习了下golang对文件 *** 作的支持。
golang对文件的支持是在os package里。我无意将本文写成官方文档的模样,我只是想讨论如何利用这些接口 *** 作文件。
OPEN
funcopenfile(namestring,flagint,permfileMode)(file*file,errerror)
我们看到了也有flag,也有fileMode.比如说我要读写打开一个文件,如果不存在就创建,如果存在,就追加写,如何写go 代码?
f,err:=os.Openfile("test.txt",os.O_CREATE|os.O_APPEND|os.O_RDWR,0660)if(err!=nil){panic(err)}
CLOSE
这个接口无甚好说。接口如下
func(f*file)Close()error
但说接口没啥说的,但是golang提供了defer,这是一个我认为很赞的特点,就是将不得不做的cleanup放到defer去做。go提供了defer解决这种困境,后面不用时刻惦记close,函数退出前,会执行close
f,0660)if(err!=nil){panic("openfileFailed")}deferf.Close()...
READ和WRITE
接口如下
func(f*file)Read(b[]byte)(nint,errerror)func(f*file)ReadAt(b[]byte,offint64)(nint,errerror)func(f*file)Write(b[]byte)(nint,errerror)func(f*file)WriteAt(b[]byte,errerror)func(f*file)WriteString(sstring)(retint,errerror)
看到代码片段,学习使用读写接口:
read_buf:=make([]byte,32)varposint64=0for{n,err:=f.ReadAt(read_buf,pos)iferr!=nil&&err!=io.EOF{panic(err)}ifn==0{fmt.Printf("\nfinishread\n")break}fmt.Printf("%s",string(read_buf[:n]))pos=pos+(int64)(n)}
在看一个代码片段:
varbuff=make([]byte,1024)for{n,err:=fi.Read(buff)iferr!=nil&&err!=io.EOF{panic(err)}ifn==0{break}if_,err:=fo.Write(buff[:n]);err!=nil{panic(err)}}
最后,我写了一个完整的代码,完成简单cp功能,就叫mycp
packagemainimport"fmt"import"os"import"io"funcusage(){fmt.Printf("%s%s%s\n",os.Args[0],"filename","newfile")}funcmain(){iflen(os.Args)!=3{usage()return}filename_in:=os.Args[1]fi,err:=os.Open(filename_in)iferr!=nil{panic(err)}deferfi.Close()filename_out:=os.Args[2]fo,err:=os.Create(filename_out)iferr!=nil{panic(err)}deferfo.Close()varbuff=make([]byte,err:=fo.Write(buff[:n]);err!=nil{panic(err)}}}
执行结果
manu@manu-Hacks:~/code/go/self$./mycptest.txttest.bakmanu@manu-Hacks:~/code/go/self$difftest.txttest.bakmanu@manu-Hacks:~/code/go/self$cattest.txtthisistestfilecreatedbygoifnotexisted,pleasecreatethisfileifexisted,Pleasewriteappendhelloworld,hellogothisistestfilecreatedbygoifnotexisted,hellogo总结
以上是内存溢出为你收集整理的golang 文件 *** 作全部内容,希望文章能够帮你解决golang 文件 *** 作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)