我的博客|文章首发
顾名思义,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欢迎关注公众号 程序员工具集