commit | 5b776f723b6b8359a65b3e8a1f2670361b991901 | [log] [tgz] |
---|---|---|
author | Ruben Vermeersch <ruben@rocketeer.be> | Wed Aug 27 15:23:53 2014 |
committer | Ruben Vermeersch <ruben@rocketeer.be> | Wed Aug 27 15:23:53 2014 |
tree | 0f0d50841473838ab237a788ef0c45da9dc328a9 | |
parent | 0af1630672c20c57b4f10c2afba2264516562918 [diff] |
Cache homedir between invocations. The homedir of a user doesn't change anyway. Massively speeds up the case where $HOME isn't set. Before: BenchmarkDir 1000 2571286 ns/op After: BenchmarkDir 1000000000 2.77 ns/op
This is a Go library for detecting the user's home directory without the use of cgo, so the library can be used in cross-compilation environments.
Usage is incredibly simple, just call homedir.Dir()
to get the home directory for a user, and homedir.Expand()
to expand the ~
in a path to the home directory.
Why not just use os/user
? The built-in os/user
package requires cgo on Darwin systems. This means that any Go code that uses that package cannot cross compile. But 99% of the time the use for os/user
is just to retrieve the home directory, which we can do for the current user without cgo. This library does that, enabling cross-compilation.