xdg - 获取 XDG 标准目录路径

简介: xdg - 获取 XDG 标准目录路径

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:缓存文件目录

使用

  1. 安装 xdg 库
go get -u github.com/OpenPeeDeeP/xdg
  1. 实例化
import "github.com/OpenPeeDeeP/xdg"
x := xdg.New("go-lib", "xdf")
  1. 使用

使用起来很简单,因为它的功能就是简单地提供几个目录而已:

// /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 里面的实现,即使在其他文件里面给同一个结构体定义了相同的方法也不影响。


目录
相关文章
|
3月前
|
机器人
04_不同路径
04_不同路径
|
7月前
|
存储 数据挖掘 Python
Python技术分享:实现选择文件或目录路径的方法
Python技术分享:实现选择文件或目录路径的方法
405 2
|
7月前
|
C++
[C++] 获取工程路径、解决方案路径和.exe路径
[C++] 获取工程路径、解决方案路径和.exe路径
177 1
|
C++
19.【c++基础篇.三个文件实现】
19.【c++基础篇.三个文件实现】
80 0
|
机器人
Day39——62.不同路径 63. 不同路径 II
Day39——62.不同路径 63. 不同路径 II
88 0
C#(三十六)之文件夹、路径、环境特殊目录类
本篇内容记录了文件类操作、文件夹操作、Directory类方法、Path类方法和字段、Environment获取电脑的相关属性方法。
254 0
C#(三十六)之文件夹、路径、环境特殊目录类
62. 不同路径
62. 不同路径
61 0
62. 不同路径
|
内存技术
若某文件系统的目录结构如下图所示,假设用户要访问文件 fault.swf ,且当前工作目录为 swshare ,则该文件的全文件名为( ),相对路径和绝对路径分别为( 请在此空作答
若某文件系统的目录结构如下图所示,假设用户要访问文件 fault.swf ,且当前工作目录为 swshare ,则该文件的全文件名为( ),相对路径和绝对路径分别为( 请在此空作答
294 0
若某文件系统的目录结构如下图所示,假设用户要访问文件 fault.swf ,且当前工作目录为 swshare ,则该文件的全文件名为( ),相对路径和绝对路径分别为( 请在此空作答
|
前端开发 数据采集 JavaScript
项目目录标准结构
(学习自慕课网中《所向披靡的响应式开发》课程中) 一.如何组织项目目录结构 1.约定优于配置 2.约定代码结构或命名规范来减少配置数量 (没有最好的组织方式,只有合适的组织方式) 样式放入CSS文件下,main.css是通用样式,normalize.css是引用样式,login是的登录样式。
1477 0