go语言perm函数 go语言grpc

golang ioutil.WriteFile函数perm参数的用法golang ioutil.WriteFile函数perm参数的用法
【go语言perm函数 go语言grpc】ioutil.WriteFile(..., perm os.FileMode)
刚开始接触golang的文件API的时候go语言perm函数,总是纳闷为什么在创建文件的时候需要显示的指定文件的perm属性go语言perm函数,难道不能从系统的umask里面获取吗?
实际上ioutil.WriteFile在创建新文件时,并不是直接使用参数perm的值,而是要和umask的值做合并的 。把函数参数的值合并到当前umask的值,才是最终创建出来文件的perm属性 。
例如
umask为空,所以ioutil.WriteFile的perm属性就是最后的文件属性
umask为0777,所以ioutil.WriteFile的perm属性全被disable掉了
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的文件 。
golang如何创建目录golang中关于目录与文件名等操作都在os这个包中 , 具体的创建目录都是通过Mkdir和MkdirAll这2个函数来实现的,这两个函数用法一致
os.Mkdir(dirName string, perm FileMode)
dirName即要创建的目录(文件夹路径),可以是绝对路径 , 也可以是相对路径(相对于GOPATH)
perm表示创建的目录的权限,如0777(读r权限值为4,写权限w值为2,执行权限x值为1)
如:我要在/data/program/goapp这个目录下创建一个golang这个子目录,示例如下:
package main
import (
"os"
"fmt"
)
func main() {
err := os.Mkdir("/data/program/goapp/golang", 0666)
if err != nil {
fmt.Println(err)
}
}
注:Mkdir和MkdirAll的区别
Mkdir创建目录,它的父级目录必须是存在的,不然创建会失败
MkdirAll可以递归创建目录,即只要根目录存在即可 , 如下:
err := os.MkdirAll("/data/program/goapp/golang/test/hello", 0766)
if err != nil {
fmt.Println(err)
}
本例中:/data/program/goapp是已经存在的目录,而子目录golang/test/hello是不存在,此时要使用MkdirAll来创建
go语言从入门到精通第四天函数当我们将一种功能用于多个地方的时候,就需要封装这些功能,以便于多次使用,然而封装就需要使用函数来进行封装 , 因此本章我们就来说说函数的使用方法 。我们先来看看涉及到函数的一些用法目录 。如下:
无参函数
有参函数
带返回值的函数
带多个返回值的函数
匿名函数
闭包
自调用
递归
本章内容还是比较丰富的,请耐心往下看 。
Go语言文件操作本文主要介绍了Go语言中文件读写go语言perm函数的相关操作 。
文件是什么?
计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合go语言perm函数,文件分为文本文件和二进制文件 。
os.Open() 函数能够打开一个文件go语言perm函数,返回一个 *File 和一个 err。对得到的文件实例调用 close() 方法能够关闭文件 。
为了防止文件忘记关闭 , 我们通常使用defer注册文件关闭语句 。
Read方法定义如下:
它接收一个字节切片 , 返回读取的字节数和可能的具体错误,读到文件末尾时会返回 0 和 io.EOF。举个例子:

推荐阅读