| # 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. |