go os.FileMode()传值问题
2018-10-07 本文已影响12人
ljh123
linux中的权限rwx分别对应4 2 1,相加的值为7,习惯了linux中权限命令使用,会将 os.FileMode(777) 误解等价于 777权限,但是将777传入os.FileMode,你会发现打印出来的不是 -rwxrwxrwx
可能会想只要在编程的时候,在前面加个0不就行了?但是有情况是这样的,就是外部传入一个变量值是十进制数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中,转换方法如下
方法一:使用标准库中的strconv.ParseInt,如下
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
方法二:自己编写转换进制函数