golang 文件 *** 作

golang 文件 *** 作,第1张

概述        *** 作文件是任何编程语言都绕不过,要掌握一门语言,知道如何 *** 作文件是必不可少的,今天学习了下golang对文件 *** 作的支持。     golang对文件的支持是在os package里。我无意将本文写成官方文档的模样,我只是想讨论如何利用这些接口 *** 作文件。     OPEN func OpenFile(name string, flag int, perm FileMode) (file

*** 作文件是任何编程语言都绕不过,要掌握一门语言,知道如何 *** 作文件是必不可少的,今天学习了下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 文件 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1287019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存