Golang for Admins Vol. 2: Users
The Setup
If you’re like me, you probably found Kelsey Hightower’s talk from Gophercon 2014 Go for Sysadmins. If you haven’t watched it, go check it out. You’ll get pumped up and start wanting to pickup Go even more.
So he briefly describes how Go is so easy to get things like system user information. A lightbulb goes on, and I think “hey! I can do that too”.
Break Out the Manual
You have two options: Check out the pkg from the official documentation page, or use our awesome local godoc
server from our first Golang blog.
Check out 2 key components: The User struct, and the method Current(). It looks like the Current()
method returns a User type, and a possible error. We’re going to use the common pattern for error checking:
User, error := user.Current()
if error != nil{
// Do something here if an error occured
}
This is a standard pattern you can see more patterns like these in some of the links below. Now after careful inspection of the package documentation, we are ready to take a crack at the challenge.
// userinfo shows information of the current user.
package main
import (
"fmt"
"os/user"
)
func main() {
thisUser, error := user.Current()
if error != nil {
fmt.Printf("Something bad happened: %s\n", error)
}
fmt.Printf("User\t%s\nUID:\t%s\nGID:\t%s\nHome:\t%s\n",
thisUser.Username, thisUser.Uid, thisUser.Gid, thisUser.HomeDir)
}
We are outputting the current user’s information. Their username, UID, GID, and home directory. The output once compiled should look something like this:
./userinfo
User bobby
UID: 1000
GID: 1000
Home: /home/bobby
Challenge to the Reader
Given your newfound knowledge about getting user data, can you determine how to
get information about another user besides the current user, using the
os/user
library?
Wrap Up
This was a fun & quick post for me. I was hoping to share a little bit about a library that a Sysadmin or Engineer could find useful. If you enjoyed the blog and want to support me, feel free to pickup one of these great books off Amazon. So far I’ve only put up books I’ve read and got something out of. Thanks for reading, see you at part III.