Go语言文件操作本文主要介绍了Go语言中文件读写的相关操作 。
文件是什么?
计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合 , 文件分为文本文件和二进制文件 。
os.Open() 函数能够打开一个文件,返回一个 *File 和一个 err。对得到的文件实例调用 close() 方法能够关闭文件 。
为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句 。
Read方法定义如下:
它接收一个字节切片,返回读取的字节数和可能的具体错误 , 读到文件末尾时会返回 0 和 io.EOF。举个例子:
使用for循环读取文件中的所有数据 。
bufio是在file的基础上封装了一层API , 支持更多的功能 。
io/ioutil 包的 ReadFile 方法能够读取完整的文件 , 只需要将文件名作为参数传入 。
os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能 。
其中:
name :要打开的文件名flag :打开文件的模式 。模式有以下几种:
perm :文件权限,一个八进制数 。r(读)04,w(写)02,x(执行)01 。
golang ioutil.WriteFile函数perm参数的用法【go语言ioutil go语言前景】golang ioutil.WriteFile函数perm参数的用法
ioutil.WriteFile(..., perm os.FileMode)
刚开始接触golang的文件API的时候go语言ioutil,总是纳闷为什么在创建文件的时候需要显示的指定文件的perm属性,难道不能从系统的umask里面获取吗?
实际上ioutil.WriteFile在创建新文件时,并不是直接使用参数perm的值,而是要和umask的值做合并的 。把函数参数的值合并到当前umask的值,才是最终创建出来文件的perm属性 。
例如
umask为空,所以ioutil.WriteFile的perm属性就是最后的文件属性
umask为0777 , 所以ioutil.WriteFile的perm属性全被disable掉go语言ioutil了
umask为0000,所以ioutil.WriteFile的perm属性就是最后的文件属性
umask为0640,而ioutil.WriteFile的perm属性也是640,正好全部被关闭了,最后生成的文件没有任何属性 。
即ioutil.WriteFile在写文件时 , 如果目标文件已经存在,那么目标文件的perm属性不会被改动,即此时ioutil.WriteFile的参数perm会被忽略 。
注意一点就明白了,touch命令使用的是0666的属性,它并没有给X(executable)属性置值,所以不管在umask中对executable位是否置1 , touch命令就不能生成一个具有executable的文件 。
go语言递归扫描指定目录下文件使用go语言递归查找指定目录下的文件,根据正则匹配筛选出需要的文件,并且忽略指定的目录
先使用 ioutil.ReadDir 遍历出指定目录下的文件 , 再递归进目录中遍历 , 问题的关键在于识别出文件为目录,fs.FileInfo 中有一个 IsDir() 函数可以识别是否是目录
正则匹配使用 regexp.MatchString ,regexp中有很多正则操作的工具,如根据正则替换字符串中的指定字符
go语言 ioutil.ReadFile 与ioutil.ReadAll差别 ?? 当读取91.2 MB文件时 , read1耗时43ms,read2耗时99ms 。
查看源码:
读取文件主要是通过 Read(p []byte) (n int, err error) :
官方文档中关于该接口方法的说明:
结论:
??ReadFile(filename string)方法之所以速度快的原因就是先计算出file文件的size,在初始化对应size大小的buff,传入ReadRead(p []byte) 来读取字节流
go语言对象的问题?Get转到定义是如下代码,
func (c *Client) Get(url string) (resp *Response, err error) {
req, err := NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
return c.Do(req)
}
看上去已经有足够多的动作了,并不是你说的只是一个接口啊
go语言ioutil的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于go语言前景、go语言ioutil的信息别忘了在本站进行查找喔 。
推荐阅读
- 鸿蒙墓碑机制软件下载不了,鸿蒙墓碑机制软件下载不了怎么办
- erp管理系统设计与实现,erp系统设计方案pdf
- 虎牙直播看不了视频,虎牙直播看不了视频了
- vb.net控制窗体 vbs窗体
- ERP新旧系统对接,erp系统切换方案
- 突击下载,爆枪突击下载
- 怎么电视怎么画,电视怎样画呢
- oracle为空怎么判断 oracle判断是否为空的函数
- kfc小程序自取怎么评价,kfc怎么点餐自取