|  | Third-party libraries: goprotobuf and beyond | 
|  | 20 Apr 2010 | 
|  | Tags: protobuf, community | 
|  |  | 
|  | Andrew Gerrand | 
|  |  | 
|  | * Introduction | 
|  |  | 
|  | On March 24, Rob Pike announced [[http://code.google.com/p/goprotobuf/][goprotobuf]], the Go bindings of Google's data interchange format [[http://code.google.com/apis/protocolbuffers/docs/overview.html][Protocol Buffers]], called protobufs for short.  With this announcement, Go joins C++, Java, and Python as languages providing official protobuf implementations. This marks an important milestone in enabling the interoperability between existing systems and those built in Go. | 
|  |  | 
|  | The goprotobuf project consists of two parts: a 'protocol compiler plugin' that generates Go source files that, once compiled, can access and manage protocol buffers; and a Go package that implements run-time support for encoding (marshaling), decoding (unmarshaling), and accessing protocol buffers. | 
|  |  | 
|  | To use goprotobuf, you first need to have both Go and [[http://code.google.com/p/protobuf/][protobuf]] installed. You can then install the 'proto' package with [[https://golang.org/cmd/goinstall/][goinstall]]: | 
|  |  | 
|  | goinstall goprotobuf.googlecode.com/hg/proto | 
|  |  | 
|  | And then install the protobuf compiler plugin: | 
|  |  | 
|  | cd $GOROOT/src/pkg/goprotobuf.googlecode.com/hg/compiler | 
|  | make install | 
|  |  | 
|  | For more detail see the project's [[http://code.google.com/p/goprotobuf/source/browse/README][README]] file. | 
|  |  | 
|  | This is one of a growing list of third-party [[http://godashboard.appspot.com/package][Go projects]]. Since the announcement of goprotobuf, the X Go bindings have been spun off from the standard library to the [[http://code.google.com/p/x-go-binding/][x-go-binding]] project, and work has begun on a [[http://www.freetype.org/][Freetype]] port, [[http://code.google.com/p/freetype-go/][freetype-go]]. Other popular third-party projects include the lightweight web framework [[http://github.com/hoisie/web.go][web.go]], and the Go GTK bindings [[http://github.com/mattn/go-gtk][gtk-go]]. | 
|  |  | 
|  | We wish to encourage the development of other useful packages by the open source community. If you're working on something, don't keep it to yourself - let us know through our mailing list [[http://groups.google.com/group/golang-nuts][golang-nuts]]. |