| # Spotlight on external Go libraries |
| 3 Jun 2011 |
| Tags: community, libraries |
| Summary: Some popular Go libraries and how to use them. |
| OldURL: /spotlight-on-external-go-libraries |
| |
| Andrew Gerrand |
| |
| ## |
| |
| While the Go authors have been working hard at improving Go's standard library, |
| the greater community has created a growing ecosystem of external libraries. |
| In this post we look at some popular Go libraries and how they can be used. |
| |
| [Mgo](http://labix.org/mgo) (pronounced "mango") is a MongoDB database driver. |
| [MongoDB](http://www.mongodb.org/) is a [document-oriented database](http://en.wikipedia.org/wiki/Document-oriented_database) |
| with a long list of features suitable for [a broad range of uses](http://www.mongodb.org/display/DOCS/Use%2BCases). |
| The mgo package provides a rich, idiomatic Go API for working with MongoDB, |
| from basic operations such as inserting and updating records to the more |
| advanced [MapReduce](http://www.mongodb.org/display/DOCS/MapReduce) and |
| [GridFS](http://www.mongodb.org/display/DOCS/GridFS) features. |
| Mgo has a bunch of cool features including automated cluster discovery and |
| result pre-fetching - see the [mgo homepage](http://labix.org/mgo) for |
| details and example code. |
| For working with large data sets Go, MongoDB, |
| and mgo are a powerful combination. |
| |
| [Authcookie](https://github.com/dchest/authcookie) is a web library for |
| generating and verifying user authentication cookies. |
| It allows web servers to hand out cryptographically secure tokens tied to |
| a specific user that will expire after a specified time period. |
| It has a simple API that makes it straightforward to add authentication |
| to existing web applications. |
| See the [README file](https://github.com/dchest/authcookie/blob/master/README.md) |
| for details and example code. |
| |
| [Go-charset](http://code.google.com/p/go-charset) provides support for |
| converting between Go's standard UTF-8 encoding and a variety of character sets. |
| The go-charset package implements a translating io.Reader and io.Writer |
| so you can wrap existing Readers and Writers (such as network connections |
| or file descriptors), |
| making it easy to communicate with systems that use other character encodings. |
| |
| [Go-socket.io](https://github.com/madari/go-socket.io) is a Go implementation |
| of [Socket.IO](http://socket.io/), |
| a client/server API that allows web servers to push messages to web browsers. |
| Depending on the capabilities of the user's browser, |
| Socket.IO uses the best transport for the connection, |
| be it modern websockets, AJAX long polling, |
| or some [other mechanism](http://socket.io/#transports). |
| Go-socket.io bridges the gap between Go servers and rich JavaScript clients |
| for a wide range of browsers. |
| To get a feel for go-socket.io see the [chat server example](https://github.com/madari/go-socket.io/blob/master/example/example.go). |
| |
| It's worth mentioning that these packages are [goinstallable](https://golang.org/cmd/goinstall/). |
| With an up-to-date Go [installation](https://golang.org/doc/install.html) |
| you can install them all with a single command: |
| |
| goinstall launchpad.net/mgo \ |
| github.com/dchest/authcookie \ |
| go-charset.googlecode.com/hg/charset \ |
| github.com/madari/go-socket.io |
| |
| Once goinstalled, the packages can be imported using those same paths: |
| |
| import ( |
| "launchpad.net/mgo" |
| "github.com/dchest/authcookie" |
| "go-charset.googlecode.com/hg/charset" |
| "github.com/madari/go-socket.io" |
| ) |
| |
| Also, as they are now a part of the local Go system, |
| we can inspect their documentation with [godoc](https://golang.org/cmd/godoc/): |
| |
| godoc launchpad.net/mgo Database # see docs for Database type |
| |
| Of course, this is just the tip of the iceberg; |
| there are more great Go libraries listed on the [package dashboard](http://godashboard.appspot.com/package) |
| and many more to come. |