golang 文件操作

前端之家收集整理的这篇文章主要介绍了golang 文件操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

操作文件是任何编程语言都绕不过,要掌握一门语言,知道如何操作文件是必不可少的,今天学习了下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=0
for{

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

packagemain
import"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.bak
manu@manu-hacks:~/code/go/self$difftest.txttest.bak
manu@manu-hacks:~/code/go/self$cattest.txt
thisistestfilecreatedbygo
ifnotexisted,pleasecreatethisfile
ifexisted,Pleasewriteappend
helloworld,hellogo
thisistestfilecreatedbygo
ifnotexisted,hellogo
原文链接:https://www.f2er.com/go/190250.html

猜你在找的Go相关文章