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


目录
相关文章
|
5月前
|
域名解析 存储 安全
家庭宽带IP与IDC机房IP
本文对比了家庭宽带IP与IDC机房IP在定义、用途、稳定性、带宽、安全性及IP地址分配方式上的差异。家庭宽带IP主要用于个人上网,动态分配,带宽和安全性较低,稳定性受多种因素影响;而IDC机房IP专为服务器设计,静态分配,带宽资源丰富,具备高稳定性和专业安全防护措施,适合企业级应用需求。
443 2
|
12月前
|
Oracle 关系型数据库 Linux
VMware的创始人
VMware的创始人
269 4
|
IDE 数据可视化 Linux
在Linux中,如何比较两个文件差异?
在Linux中,如何比较两个文件差异?
|
前端开发 数据可视化 搜索推荐
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
1098 1
在Linux中,如何在Linux中查看当前路径?
在Linux中,如何在Linux中查看当前路径?
|
数据安全/隐私保护 Android开发 UED
【Uniapp 专栏】Uniapp 在社交应用开发中的案例研究
【5月更文挑战第12天】本文探讨了一个使用Uniapp开发的社交应用案例,该应用提供用户注册登录、个人资料管理、好友关系、动态发布、消息聊天等功能。Uniapp的跨平台特性和丰富的组件简化了开发过程,确保应用在iOS和Android上的兼容性。特色功能如话题标签、点赞评论和附近的人增加了用户互动。设计上追求简洁美观,同时重视数据安全。此案例展示了Uniapp在社交应用开发的潜力和优势。
282 4
|
域名解析 缓存 负载均衡
如何使用jsDelivr+Github 实现免费CDN加速?
如何使用jsDelivr+Github 实现免费CDN加速?
864 0
如何使用jsDelivr+Github 实现免费CDN加速?
|
存储 安全 搜索推荐
阿里云短信购买和使用流程
阿里云短信是阿里云推出的一项企业级短信服务,可以帮助企业快速、便捷地实现与员工、客户、合作伙伴之间的短信沟通和信息传递。 阿里云短信支持个性化短信模板、自定义签名、短信分组管理、群发短信等功能,可以满足不同企业的短信需求。同时,阿里云短信还提供了高并发能力、海量存储、稳定安全的短信服务,保障企业的短信发送效果和用户体验。
|
存储 Linux KVM
2021最新版KVM虚拟机安装详解
2021最新版KVM虚拟机安装详解
863 0
|
缓存 Java 大数据
深入解析JVM调优:解决OutOfMemoryError、内存泄露、线程死锁、锁争用和高CPU消耗问题
深入解析JVM调优:解决OutOfMemoryError、内存泄露、线程死锁、锁争用和高CPU消耗问题
530 0