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

happlyfox 發表於 2021-04-01
Go

關於我

我的部落格|文章首發

顧名思義,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將~轉換成使用者主目錄地址,後臺跟自己的地址進行拼接

參考

github.com/mitchellh/go-homedir

zhuanlan.zhihu.com/p/102785627

END

歡迎關注公眾號 程式設計師工具集 👍👍 致力於分享優秀的開源專案、學習資源 、常用工具

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

本作品採用《CC 協議》,轉載必須註明作者和本文連結