在go中,使用os.Chmod(filename,filemod)需要传入的是要变更权限的文件名和要变更的权限,
也就类似于linux中的chmod
一开始我以为的是只要在后面权限参数上写上二进制的权限制就行,后来发现是不行的,需要进行转换
得益于https://www.jianshu.com/p/216cb89c4d81
得知:777通过转换并不能成为 -rwxrwxrwx,
这是因为外部传入的是十进制777
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.FileMode(777), 777)
fmt.Println(os.FileMode(0777), 0777)
}
输出结果:
-r----x--x 777
-rwxrwxrwx 511
正确使用os.FileMode()时,应该先将777 先看成八进制,然后转成十进制值,传入os.FileMode中,转换方法如下
mode := 777
um, _ := strconv.ParseInt(strconv.Itoa(mode), 8, 0)
// 完整测试代码
package main
import (
"fmt"
"os"
"strconv"
)
func main() {
um, _ := strconv.ParseInt(strconv.Itoa(777), 8, 0)
fmt.Println(os.FileMode(777), 777)
fmt.Println(os.FileMode(0777), 0777)
fmt.Println(os.FileMode(um), um)
}
输出:
-r----x--x 777
-rwxrwxrwx 511
-rwxrwxrwx 511
使用filemod
接受外部传入的参数mod
perm, _ := strconv.ParseInt(mod, 8, 0)
per := os.FileMode(perm)
err2 := os.Chmod(dest, per)
if err2 == nil {
return