1. 程式人生 > >go每日一庫 [home-dir] 獲取使用者主目錄

go每日一庫 [home-dir] 獲取使用者主目錄

## 關於我 [我的部落格|文章首發](http://www.zhouhuibo.club) 顧名思義,`go-homedir`用來獲取使用者的主目錄。實際上,通過使用標準庫`os/user`我們也可以得到內容,使用以下方式 ## 標準庫使用 ``` package main import ( "fmt" "log" "os/user" ) func main() { u, err := user.Current() if err != nil { log.Fatal(err) } fmt.Println("Home dir:", u.HomeDir) } ``` > 控制檯輸出 > > Home dir: C:\Users\Administrator ## 為什麼要用home-dir 內建`os/user`軟體包在Darwin系統上需要cgo。這意味著任何使用該軟體包的Go程式碼都無法交叉編譯。但是99%的使用時間`os/user`只是用於檢索主目錄,我們可以在沒有cgo的情況下為當前使用者執行此操作。該庫可以做到這一點,從而可以進行交叉編譯。 ## home-dir 使用 `go-homedir`有兩個功能: - `Dir`:獲取使用者主目錄; - `Expand`:將路徑中的第一個`~`擴充套件成使用者主目錄。 下面我們通過一個案例進行說明 ```> func homedirUse() { dir, err := homedir.Dir() if err != nil { log.Fatal(err) } fmt.Println("Home dir:", dir) dir = "~/parentRoot/childRoot" expandedDir, err := homedir.Expand(dir) if err != nil { log.Fatal(err) } fmt.Printf("Expand of %s is: %s\n", dir, expandedDir) } ``` > 控制檯輸出 > > Home dir: C:\Users\Administrator > Expand of ~/parentRoot/childRoot is: C:\Users\Administrator\parentRoot\childRoot Home dir 是當前使用者主目錄,在linux下對應/home/目錄 Expandof將`~`轉換成使用者主目錄地址,後臺跟自己的地址進行拼接 ## 參考 https://github.com/mitchellh/go-homedir https://zhuanlan.zhihu.com/p/102785627 ## END 歡迎關注公眾號 程式設計師工具集