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


目录
相关文章
|
前端开发
Vite——如何配置使用sass
Vite——如何配置使用sass
883 0
|
Oracle 关系型数据库 Linux
VMware的创始人
VMware的创始人
320 4
|
应用服务中间件 API nginx
解决跨域问题 Response to preflight request doesn't pass access control check
解决跨域问题 Response to preflight request doesn't pass access control check
13033 1
|
JSON 安全 前端开发
跨域请求出现preflight request失败的问题的解决
# 问题出现 这两天在项目联调过程中突然前端同学报告出现CORS跨域问题无法访问。刚听到很奇怪,因为已经在项目里面设置了CORS规则,理论上不会出现这个问题。 ```java protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
54886 1
在Linux中,如何在Linux中查看当前路径?
在Linux中,如何在Linux中查看当前路径?
|
自然语言处理 Linux 数据处理
探索Linux的localedef命令:定义和管理本地化环境
`localedef`是Linux中用于创建和管理本地化环境的命令,它基于输入文件和模板生成二进制的本地化定义,以支持多语言显示和处理。通过参数如 `-i` 指定输入文件,`-f` 指定字符集,`-o` 输出文件路径。在实际应用中,如创建法语(法国)环境,会执行类似 `localedef -i fr_FR -f UTF-8 -c -o /path/to/output fr_FR.UTF-8` 的命令。使用时注意输入文件的准确性、选择合适的字符集,并在操作前备份。查阅文档和社区资源可获取更多帮助。
|
测试技术 Linux 网络安全
跨平台开发:使用C语言编写跨平台应用程序。
跨平台开发:使用C语言编写跨平台应用程序。
|
数据安全/隐私保护 Android开发 UED
【Uniapp 专栏】Uniapp 在社交应用开发中的案例研究
【5月更文挑战第12天】本文探讨了一个使用Uniapp开发的社交应用案例,该应用提供用户注册登录、个人资料管理、好友关系、动态发布、消息聊天等功能。Uniapp的跨平台特性和丰富的组件简化了开发过程,确保应用在iOS和Android上的兼容性。特色功能如话题标签、点赞评论和附近的人增加了用户互动。设计上追求简洁美观,同时重视数据安全。此案例展示了Uniapp在社交应用开发的潜力和优势。
361 4
|
编解码 数据可视化 前端开发
【100天精通python】Day35:GUI界面编程_一文掌握Tkinter基本操作
【100天精通python】Day35:GUI界面编程_一文掌握Tkinter基本操作
462 0
【100天精通python】Day35:GUI界面编程_一文掌握Tkinter基本操作
|
Ubuntu Linux 数据安全/隐私保护
ubuntu 图形化搭建(vnc viewer)
20.0 系统 vnc图形化
1206 0
ubuntu 图形化搭建(vnc  viewer)

热门文章

最新文章