ioutil包中写文件的方法:
func WriteFile(filename string, data []byte, perm os.FileMode) error
关于权限的定义,可以参考golang源代码:\Go\src\os\types.go
perm是FileMode类型的:
type FileMode uint32
// The nine least-significant bits are the standard Unix rwxrwxrwx permissions.
const (
...
ModePerm FileMode = 0777 // Unix permission bits
)
FileMode在所有的系统中定义都是相同的,常用的值定义如下:
const (
OS_READ = 04
OS_WRITE = 02
OS_EX = 01
OS_USER_SHIFT = 6
OS_GROUP_SHIFT = 3
OS_OTH_SHIFT = 0
OS_USER_R = OS_READ<<OS_USER_SHIFT
OS_USER_W = OS_WRITE<<OS_USER_SHIFT
OS_USER_X = OS_EX<<OS_USER_SHIFT
OS_USER_RW = OS_USER_R | OS_USER_W
OS_USER_RWX = OS_USER_RW | OS_USER_X
OS_GROUP_R = OS_READ<<OS_GROUP_SHIFT
OS_GROUP_W = OS_WRITE<<OS_GROUP_SHIFT
OS_GROUP_X = OS_EX<<OS_GROUP_SHIFT
OS_GROUP_RW = OS_GROUP_R | OS_GROUP_W
OS_GROUP_RWX = OS_GROUP_RW | OS_GROUP_X
OS_OTH_R = OS_READ<<OS_OTH_SHIFT
OS_OTH_W = OS_WRITE<<OS_OTH_SHIFT
OS_OTH_X = OS_EX<<OS_OTH_SHIFT
OS_OTH_RW = OS_OTH_R | OS_OTH_W
OS_OTH_RWX = OS_OTH_RW | OS_OTH_X
OS_ALL_R = OS_USER_R | OS_GROUP_R | OS_OTH_R
OS_ALL_W = OS_USER_W | OS_GROUP_W | OS_OTH_W
OS_ALL_X = OS_USER_X | OS_GROUP_X | OS_OTH_X
OS_ALL_RW = OS_ALL_R | OS_ALL_W
OS_ALL_RWX = OS_ALL_RW | OS_GROUP_X)
...
)
一般都文件属性标识如下:
-rwxrwxrwx
第1位:文件属性,一般常用的是"-",表示是普通文件;"d"表示是一个目录。
第2~4位:文件所有者的权限rwx (可读/可写/可执行)。
第5~7位:文件所属用户组的权限rwx (可读/可写/可执行)。
第8~10位:其他人的权限rwx (可读/可写/可执行)。
在golang中,可以使用os.FileMode(perm).String()来查看权限标识:
os.FileMode(0777).String() //返回 -rwxrwxrwx
os.FileMode(0666).String() //返回 -rw-rw-rw-
os.FileMode(0644).String() //返回 -rw-r--r--
0777表示:创建了一个普通文件,所有人拥有所有的读、写、执行权限
0666表示:创建了一个普通文件,所有人拥有对该文件的读、写权限,但是都不可执行
0644表示:创建了一个普通文件,文件所有者对该文件有读写权限,用户组和其他人只有读权限,都没有执行权限
注意,golang中创建文件指定权限时,只能以"0XXX"的形式,不能省掉前面的"0",否则指定的权限不是预期的。如:
os.FileMode(777).String() //返回 -r----x--x
os.FileMode(666).String() //返回 --w--wx-w-
os.FileMode(644).String() //返回 --w----r--