go os.FileMode()傳值問題

yzf01發表於2021-09-09

linux中的許可權rwx分別對應4 2 1,相加的值為7,習慣了linux中許可權命令使用,會將 os.FileMode(777) 誤解等價於 777許可權,但是將777傳入os.FileMode,你會發現列印出來的不是 -rwxrwxrwx

可能會想只要在程式設計的時候,在前面加個0不就行了?但是有情況是這樣的,就是外部傳入一個變數值是十進位制數777

package mainimport (    "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 := 777um, _ := strconv.ParseInt(strconv.Itoa(mode), 8, 0)// 完整測試程式碼package mainimport (    "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

方法二:自己編寫轉換進位制函式



作者:laijh
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2334/viewspace-2819965/,如需轉載,請註明出處,否則將追究法律責任。

相關文章