XDG 是什么
XDG基本目录规范定义了四类文件的存储路径,分别是:缓存、配置、数据和运行时文件。
这不是一个强制性的规范,但是建议这样保存我们应用产生的文件。
具体规范内容可查看: XDG 基本目录规范
用途
在我们开发一些 cli 应用或者客户端应用的时候,我们如果需要保存一些文件到用户电脑上的话,可以使用这些目录来保存。
对应各个系统下的目录路径
Linux(and BSD) | Mac | Windows | |
XDG_DATA_DIRS |
[/usr/local/share , /usr/share ] |
[/Library/Application Support ] |
%PROGRAMDATA% |
XDG_DATA_HOME |
~/.local/share |
~/Library/Application Support |
%APPDATA% |
XDG_CONFIG_DIRS |
[/etc/xdg ] |
[/Library/Application Support ] |
%PROGRAMDATA% |
XDG_CONFIG_HOME |
~/.config |
~/Library/Application Support |
%APPDATA% |
XDG_CACHE_HOME |
~/.cache |
~/Library/Caches |
%LOCALAPPDATA% |
- XDG_DATA_DIRS:数据目录
- XDG_DATA_HOME:当前用户数据目录(上面那个是所有用户共用的)
- XDG_CONFIG_DIRS:配置文件目录
- XDG_CONFIG_HOME:当前用户配置目录(上面那个是所有用户共用的)
- XDG_CACHE_HOME:缓存文件目录
使用
- 安装 xdg 库
go get -u github.com/OpenPeeDeeP/xdg
- 实例化
import "github.com/OpenPeeDeeP/xdg" x := xdg.New("go-lib", "xdf")
- 使用
使用起来很简单,因为它的功能就是简单地提供几个目录而已:
// /Users/ruby 是我本地的用户主目录 fmt.Println(x.DataHome()) // /Users/ruby/Library/Application Support/go-lib/xdf fmt.Println(x.CacheHome()) // /Users/ruby/Library/Caches/go-lib/xdf fmt.Println(x.ConfigDirs()) // [/Library/Application Support/go-lib/xdf] fmt.Println(x.ConfigHome()) // /Users/ruby/Library/Application Support/go-lib/xdf fmt.Println(x.DataDirs()) // [/Library/Application Support/go-lib/xdf]
golang 的根据文件名后缀编译的机制
在这个 OpenPeeDeeP/xdg 库中,我们可以看到有不同文件都实现了 osDefaulter
类型的接口,但是使用的时候并没有报错,这是因为 golang 中我们可以给文件加上不同操作系统的后缀,这样只有当前系统有匹配的文件的时候才会编译,而其他操作系统后缀的文件就不会编译。
比如,xdg_linux.go
在我的 mac 下不会编译,而 xdg_darwin.go
这个文件会被编译,也就是说,在 mac 下,使用的具体实现是 xdg_darwin.go
里面的实现,即使在其他文件里面给同一个结构体定义了相同的方法也不影响。