go每日一庫 [home-dir] 獲取使用者主目錄
阿新 • • 發佈:2021-04-01
## 關於我
[我的部落格|文章首發](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
歡迎關注公眾號 程式設計師工具集