go-app-paths
Lets you retrieve platform-specific paths (like directories for app-data, cache,
config, and logs). Follows the XDG Base Directory Specification on Unix, but
also provides implementations for macOS and Windows systems.
Installation
Make sure you have a working Go environment (Go 1.2 or higher is required).
See the install instructions.
To install go-app-paths, simply run:
go get github.com/muesli/go-app-paths
To compile it from source:
cd $GOPATH/src/github.com/muesli/go-app-paths
go get -u -v
go build && go test -v
Unix |
User Scope |
System Scope |
Data Dir |
${XDG_DATA_HOME}/appname |
/usr/share/appname |
Cache Dir |
${XDG_CACHE_HOME}/appname |
/var/cache/appname |
Config Path |
${XDG_CONFIG_HOME}/appname/filename |
/etc/appname/filename |
Log Path |
${XDG_DATA_HOME}/appname/filename |
/var/log/appname/filename |
macOS |
User Scope |
System Scope |
Data Dir |
~/Library/Application Support/appname |
/Library/Application Support/appname |
Cache Dir |
~/Library/Caches/appname |
/Library/Caches/appname |
Config Path |
~/Library/Preferences/appname/filename |
/Library/Preferences/appname/filename |
Log Path |
~/Library/Logs/appname/filename |
/Library/Logs/appname/filename |
Windows |
User Scope |
System Scope |
Data Dir |
%LOCALAPPDATA%/appname |
%PROGRAMDATA%/appname |
Cache Dir |
%LOCALAPPDATA%/appname/Cache |
%PROGRAMDATA%/appname/Cache |
Config Path |
%LOCALAPPDATA%/appname/Config/filename |
%PROGRAMDATA%/appname/Config/filename |
Log Path |
%LOCALAPPDATA%/appname/Logs/filename |
%PROGRAMDATA%/appname/Logs/filename |
Example
package main
import (
gap "github.com/muesli/go-app-paths"
)
func main() {
userScope := gap.NewScope(gap.User, "vendorname", "appname")
userScope.DataDir() // => ~/.local/share/appname
userScope.CacheDir() // => ~/.cache/appname
userScope.ConfigPath("filename.conf") // => ~/.config/appname/filename.conf
userScope.LogPath("filename.log") // => ~/.local/share/appname/filename.log
systemScope := gap.NewScope(gap.System, "vendorname", "appname")
systemScope.DataDir() // => /usr/share/appname
systemScope.CacheDir() // => /var/cache/appname
systemScope.ConfigPath("filename.conf") // => /etc/appname/filename.conf
systemScope.LogPath("filename.log") // => /var/log/appname/filename.log
}