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

顧名思義,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

歡迎關注公衆號 程序員工具集 👍👍 致力於分享優秀的開源項目、學習資源 、常用工具

回覆關鍵詞“關注禮包”,送你一份最全的程序員技能圖譜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章