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將~轉換成用戶主目錄地址,後台跟自己的地址進行拼接

參考

//github.com/mitchellh/go-homedir

//zhuanlan.zhihu.com/p/102785627

END

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

回復關鍵詞「關注禮包」,送你一份最全的程序員技能圖譜。