## 关于我
[我的博客|文章首发](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
欢迎关注公众号 程序员工具集 👍👍 致力于分享优秀的开源项目、学习资源 、常用工具
回复关键词“关注礼包”,送你一份最全的程序员技能图谱。
有疑问加站长微信联系(非本文作者))