Libraries Written in Go
This are various libraries implemented in the Go programming language.
Please contact me if you know of any others not listed here.
Databases
- go-cdb - Library to read and write D. J. Bernstein’s cdb (“constant database”) format. By John Barham.
- gocouch - A CouchDB client library written in Go. By Michael Hoisie.
- gofluid - FluidDB client library for Go by rossdjones (repo is down?)
- go datamapper - ActiveRecord-like database wrapper for Go by Josh Goebel.
- go-db - A generic database API (obsolete).
- HandlerSocket-GO - Go client library to talk directly to InnoDB using the HandlerSocket protocol. By Brian Ketelsen.
- Neo4j-Go - REST client for the Neo4j graph database. By Dave Meehan.
SQL Databases
- PostgreSQL
- MySQL
- GoMySQL - A quite complete threadsafe MySQL client library written in Go. By Phil Bayfield.
- Go MySQL Driver - Implementation of Go’s database/sql/driver interface for MySQL. By Julien Schmidt.
- MySQL Client Library A MySQL client lib in Go. By thoj.
- MyMySQL - Another MySQL client library written in pure Go. By Michał Derkacz.
- mysql-connector-go (Gone? http://code.google.com/p/mysql-connector-go/) is a package to connect to MySQL from Go. By Gerben Peters.
- MongoDB
- Redis
Memcache
- gomemcache - Memcached client library. By Brad Fitzpatrick (the original author of memcache!).
- gomemcache - Another memcache client implemented in Go. By Krzysztof Kliś (aka kklis).
Storage and File Systems
- govt - Client and server implementations of the Venti content-addressable-storage protocol. By Latchesar Ionkov.
- go-fuse - Pure Go library to build FUSE file systems. By Han-Wen Nienhuys.
- fsnotify - Cross platform file system change notification library. By Chris Howey.
File Formats
- gocsv - Library to parse and generate CSV (Comma-Separated Values) files. By consalus.
- golang-mime-multipart - MIME multipart parser. By Brad Fitzpatrick.
- mimeparse - Simple library to handle mime-types. By Joe Gregorio.
- go-libGeoIP - Library to access Maxmind GeoIP database. By Nikola Ranchev.
- asn1-ber - Library for ASN1 BER encoding and decoding. By Michael Mitton.
- marc21 - Library to read and write MARC21 bibliographic catalogue records. Maintained by Dan Scott.
- xlsx - Library to read Microsoft Excel xlsx files. By Geoff Teale.
- go-simplejson - Package to interact with arbitrary JSON. About bitly.
Compression
- snappy-go - Implmentation of the Snappy compression format. By Nigel Tao and the rest of the Go team at Google.
- go-smaz - Implementation of the smaz compression format for short strings. By Caleb Spare.
S-Expressions Parsers
- sexp - An S-Expression library for Go. By Eleanor McHugh.
- gsx - A configurable S-Expressions parser. By jimt.
- gosexp - Simple S-Expression parser. By Corey Thomasson.
YAML Parsers
yaml - Parser for YAML 1.2. By Ross Light. goyaml - Pure Go YAML parser based on LibYAML. By rlight2. go-gypsy - Parser for a simplified subset of YAML. By Kyle Lemons.
Web
- fcgigo - A FastCGI implementation in Go. By Jesse Dailey.
- gofastcgi - by Eric Moritz.
- cgi.go - A simple ‘plain-old’ CGI library (Probably obsolete now that there is CGI support in Go’s standard HTTP library.) By nebukadnezzar.
- go-pkg-rss - A package to read RSS and Atom feeds, providing a caching mechanism that adheres to the feed specs. By Jim Teeuwen.
- godom - A small library that implements a very small, non-compliant subset of the W3C DOM Core. By Jeff Schiller (aka codedread) and metaphorically.
- bwl (“Bob’s Wonderful Go Libraries”) - A set of libraries to help build web sites in Go. By Bob Appleyard.
- httplib.go - ‘Low level’ client HTTP library that provides keep-alive connections and generic requests. By Michael Hoisie.
- http_digest.go - Implementation of HTTP’s Digest Auth. By Taru Karttunen.
- go-socket.io - Backend implementation of the socket.io web-browser transport transport abstraction. By Jukka-Pekka Kekkonen.
- goautoneg - HTTP Content-Type Negotiation, match the Accept header against MIME types. By the Open Knowledge Foundation.
- pusher.go - HTTP Server Push library conforming to the Basic HTTP Push Relay Protocol. By Jukka-Pekka Kekkonen.
- seshcookie - A web session library inspired by Beaker. By Bobby Powers.
- wedge - Simple package to help cut down on boilerplate code when writing webapps. By Aaron France.
- m2go - Mongrel2 Handler for Go. By Aaron Raddon.
- gomesh - Simple HTML decoration library. By Chandra Sekar S.
- goquery - jQuery style selector engine for HTML documents. By Dobronszki János.
- goquery - Another jQuery-like engine for HTML handling. By Martin Angers.
- goproxy - Customizable HTTP proxy library. By Elazar Leibovich.
- purell - Tiny library to normalize URLs. By Martin Angers.
Web Frameworks
- pat - Sinatra style pattern muxer for Go’s net/http library, by the author of Sinatra. By Blake Mizerany.
- mango - Modular web-application framework inspired by Rack and PEP333. By Paul Bellamy.
- web.go - A simple framework to write webapps in Go. By Michael Hoisie.
- Goldorak.Go - A Go web miniframework built using mustache.go, web.go and Go-Redis. By Bruno Michel.
- goweb - RESTful and lightweight wrapper framework around the stdlib http package. By Mat Ryer.
- wfdr - Another simple web framework. By crazy2be.
- go-webproject - Easy to use small framework for web programming in Go. By Zeljko Tomic.
- Gorilla - Gorilla is a minimalist web toolkit built on top of the stdlib Go http package. By Rodrigo Moraes.
- Revel - Revel web framework. By Rob Figueiredo.
WebSockets
- Rocket - Very fast and reliable WebSockets server/framework/library. By Chris Kowalik.
Templating
- mustache.go - A Go implementation of the Mustache template language. By Michael Hoisie.
- kasia.go - Implementation of the Kasia text templating system. By Michał Derkacz.
- neste - Extended version of Go’s template package for generating textual output from nested templates. By Juhani Ahman.
Web Services and Clients for Web APIs
- go-flickr - A wrapper for Flickr’s WEB API. By Nolan Caudill of Flickr.
- go-flickr - An older client lib for the flickr API. By Frederic Gobry.
- go-twitter-oauth - A simple Twitter (and supporting OAuth code) client for the Go programming language by Samuel Montgomery-Blinn.
- twitterstream - Client library for Twitter’s streaming API. By Michael Hoisie.
- go-twitter - Another twitter lib in Go, this one by Bill Casarin.
- get2ch-go - A library to access the 2channel Japanese web bulletin board. By tanaton.
- go-pkg-lastfm - A library to access the entire Last.fm 2.0 webservice API, including the authenticated services. By Jim Teeuwen.
- goamz - Client library to access Amazon Web Services. By Canonical’s Ensemble project.
- go-ghissues - Client lib for Github’s Issues API. By Justin Lilly.
- go-dealmap - Library to access the DealMap API. By Michael Lore.
- go-tripit - Library to access the TripIt API. By Michael Lore.
- Dropbox-Go - Package to access the Dropbox API. By Scott Ferguson.
- gotank - Client for the IndexTank API. By Searchify.
- go-cloudinary - Library (and client) to access the Cloudinary service. By Mathias Monnerville.
OAuth
- gooauth - OAuth 1.0 package. By Calvin McAnarney.
- goauth - Another OAuth 1.0 package. By Adam Lloyd.
- twister/oauth - OAuth package including OAuth 2.0 support, this one part of the twister HTTP server. By Gary Burd.
Images and Graphics
- x-go-binding - Go ‘bindings’ to the X11 protocol, equivalent to XCB. Maintained by Nigel Tao and the Go team.
- svgo - A library for generation of SVG vector graphics files. By Anthony Starks.
- plotinum - Library for building and drawing plots. By Ethan Burns.
- bmp.go (http://gopaste.org/w0D8b - Down) - Simple Package to Handle encoding/decoding Windows BMP files by Ralph Sleigh.
- pdfreader - A library to read the contents of PDF files. By helmwo.
- freetype-go - A rewrite of the Freetype font engine in Go. By Nigel Tao.
- scale - Image rescaling algorithms. By Mathieu Lonjaret.
- draw2d - A postcript-inspired 2D drawing package. By Legoff Laurent.
- graphics-go - Basic image manipulation operations library in Go. By some of the members of the Go team at Google and others.
- img - Image manipulation tools. By Joshua Hawxwell.
- resize - Image resizing package including several interpolation methods. By Jan Schlicht.
- blend - Image processing library and rendering toolkit. By Guillermo Estrada.
- imageutil - Image manipulation library. By Dmitry Chestnykh.
- go-xdr - Implementation of the data representation portion of the External Data Representation (XDR) standard. By Dave Collins.
Graphical User Interfaces and Toolkits
- canvas - A widget and drawing library using exp/draw and freetype/raster. By Rog Peppe.
- gui - GUI Widget library. By David Roundy.
- hgui - A GUI toolkit. By zozor.
Distributed Computing
- gocluster - Implementation of a clustering heuristic in Go using a particle swarm optimization technique. By willscott and bart broad.
- go-router - A package for peer-peer publish/subscribe message passing. By Yigong Liu.
- goman - Gearman client. By Brad Fitzpatrick.
- gozk - Allows communication with ZooKeeper clusters. By Canonical.
IRC and IM
- irc.go - Go IRC bot framework. By Gracenotes (aka Matt Gruen).
- Calculon - A concurrent IRC bot with support for runtime (un)loadable modules and configurable via a web interface. By Jim Teeuwen (aka exch).
- Go-IRC-Client-Library - What the name says. By Thomas Jager.
- goirc - Event-based stateful IRC client framework for Go by Alex Bramley (aka fluffle).
- GoTY (Go Troll Yourself) - Minimalist client irc library by Samuel Baldwin (aka shardz).
Other Network Protocols
- go9p - 9p protocol implementation in Go by Andrey Mirtchovski and Latchesar Ionkov.
- go9 - An implementation of the 9P distributed file system protocol in go by KillerX.
- gostomp - Implementation of the STOMP (Streaming Text Orientated Messaging Protocol) messaging protocol. By nf.
- goprotobuf - Google’s Protocol Buffers for Go. Maintained by the Go team.
- thrift - Initial work on Thrift for Go. By Anatol. (deprecated)
- thrift4go - A more uptodate Thrift for Go with rpc support. By Aalok Shah.
- GoSMPP - A library implementing the SMPP messaging protocol. By Phil Bayfield.
- go-wave-robot-api - A library for writing Google Wave ‘robots’. By Andrew Gerrand(of the Go team).
- go-gntp - An implementation of the Growl Network Transport Protocol(GNTP). By Yasuhiro Matsumoto (aka mattn).
- GoDCCP - Implementation of the Datagram Congestion Control Protocol. By Petar Maymounkov.
- nntp-go - Implementation of the NNTP newsgroups protocol. By Conrad Meyer and the Go team.
- GoNetlink - Netlink sockets implementation. By James Nurmi.
- ldap - Basic LDAP v3 client library. By Michael Mitton.
- spdy - An implementation of the SPDY protocol in Go. By Ross Light.
- nats - A client implementation of the NATS lightweight cloud messaging system. By Apcera.
- ssh.go - SSH2 client implementation. By Taru Karttunen.
- FTP:
DNS
- godns - An alternative DNS libary. By Miek Gieben.
- go-idn - Go version of libidn, handling the specs for: IDNA, punycode, stringprep and a fully working Unicode normalization. By Hannes Ármann Baldursson.
General Networking
- GoNeedle - System that ‘punches’ reliable transport ‘holes’ over UDP through NATs and Firewalls. By Petar Maymounkov.
- nacl - Pure Go implementation of NaCl: Networking and Cryptography Library. By Dmitry Chestnykh.
Programming
- iterutils - Implements functions from Python’s itertools module, by Michael Elkins.
- go-parse - A Parsec-like parsing library for Go by Alex Suraci (aka vito).
- go-stringio - Library implementing the various file I/O interfaces using memory buffers instead of real files. By Yongjian Xu.
- go-galib - A library of Genetic Algorithms written in Go. By Thomas Jager.
- godeferred - Re-implementation in Go of the JSDeferred async processing framework. By Yasuhiro Matsumoto (aka mattn).
- bloom - Libary implementing bloom filters. By willf.
- bayesian - Naive Bayesian classification library. By jbrukh.
Go
- go-pkg - Parse and extract information from Go package files. By bobappleyard.
Data Structures and Containers
- go-intset - A library to work with bounded sets of integers, including multiple alternative implementations. By Peter Froehlich.
- gosets - A package that implements set types for Go. By Peter Williams.
- go-btree - BTree library using gotgo. By runningwild.
- seq - Functional, concurrent and sequential sequences. By Bill Burdick.
- deepcopy - Deep datastructure copying using reflect. By Taru Karttunen.
- GoLLRB - Left-Leaning Red-Black (LLRB) implementation of balanced binary search trees. By Petar Maymounkov.
- go-avltree - AVL tree (Adel'son-Vel'skii & Landis). By Michael Lore.
- skip.go - Skip lists implementation. By Taru Karttunen.
- bitset - Package implementing bitsets. By Will Fitzgerald.
- treap - A balanced binary tree data structure, expected to have logarithmic height. By StatHat.
System and Low Level Programming Tools
- coffer - Package for copying data between memory ranges managed by C code and Go Buffers (uses cgo, so technically not a ‘pure Go lib’, but neither a binding for an existing C lib). By Stefan Plantikow.
- gonewrong - Package for dealing with C errors and locking go routines to OS threads. By Stefan Plantikow.
- gommap - Library providing a convenient interface for the mmap syscall. By Gustavo Niemeyer.
Debugging and Performance Profiling
- Go-PerfEvents - Go interface to performance events which are available in recent Linux kernels. By 0xe2-0x9a-0x9b (aka ⚛).
- gotimer - A simple way to time Go functions. By Sonia Keys.
(Unit) Testing
- gocheck - A more advanced testing framework alternative to gotest. By Gustavo Niemeyer.
- blur - Fuzzer for Go structs using reflection to identify and alter fields. By Scott Dunlop.
- GoSpec - A BDD framework for Go, by Esko Luontola.
- gospecify - Another BDD library for Go by Samuel Tesla.
- gomock - Mocking framework. By David Symonds.
- mockhttp.go - Mock object for Go http.ResponseWriter. By Tommi Virtanen (aka Tv).
- assert - Assertions for Go tests. By Blake Mizerany and Keith Rarick.
- hamcrest - Hamcrest matchers. By Mick Killianey.
Command Line UI
- goargcfg - Fills a struct with command line arguments using reflection. By jasmuth.
- optparse-go A command-line option parser for Go by Kirklin McDonald.
- goopt - Getopt clone to parse command-line flags. By David Roundy.
- opts.go - Library providing POSIX-like and GNU-style command line parsing. By Scott Lawrence.
- clingon - Package for implementing command-line interfaces for games and graphical applications. By Andrea Fazzi.
- pty - A package to interact with Unix pseudo-terminals. By Keith Rarick.
Cryptography
- pkbfd2 -
- crypto-fortuna - An implementation of the Fortuna CSPRNG (Cryptographically Strong Pseudo-Random Number Generator). By Raif S. Naffah.
- fortuna - An alternative implementation of the Fortuna random number generator by N. Ferguson and B. Schneier.
- Various crypto libs by Taru Karttunen (aka taruti):
- Envelopes - Public key and/or passwords, encrypting a large envelope of data.
- HashedBuf - A
Reader
that hashes the contents it reads. - PBKDF2 - Implementation of PKCS#5/PKBDF2/HMAC password hashing functions.
- aes_xts.go - AES XTS encryption.
- SRP - Secure Remote Password protocol.
- freecrypto - A collection of ‘free’ crypto algorithms translated from the “Crypto++” library. By John Mac.
- gohasher - A libray to build password hashes, similar to Unix’s crypt(3). By John Mac.
- go-rabbit - Implementation of Rabbit encryption algorithm. By syndtd.
- go-salsa20 - Implementation of the Synchronous Stream Cipher Salsa20 and its variants Salsa20/8 and Salsa20/12. By syndtd.
Math
- gomatrix - A linear algebra package for go. By skelterjohn.
- gocomplex - A complex number library for Go by michaelsmith.
- mudlark-go-pkgs - Libraries implementing various kinds of set, and tree data structures and sorting algorithms. By Peter Williams.
- gostat - Statistics package. By skelterjohn.
- gofrac - A fractions library with support for basic arithmetic. Note that this is partially superseded by the arbitrary precision Rat type in the standard library’s big package. By Anschel Schaffer-Cohen.
- s3dm-go - Simple 3D math library. By Tommo.
- geom - 2D geometry lib. By John Asmuth (aka skelterjohn).
- blas - Go implementation of BLAS (Basic Linear Algebra Subprograms). By Michał Derkacz.
- go-fn - Mathematical functions that are not covered by math pkg. By Peter A. Cejchan.
- go-gt - Graph theory algorithms. TSP, QAP, and other stuff. By Peter A. Cejchan.
- vectormath - Adaptation of the scalar C functions from Sony’s Vector Math library. By James Helferty.
Games
- fungo - A library to help write 2D games in Go. By beoran.
- gnarly - UDP-based networking for multiplayer gaming. By jimt.
- go-rpg - Library to write role playing games. By Jeremy Stephens.
- Box2d-go - Rewrite in Go of the Box2d physics engine. By Matteo Goggi.
- Baukasten - Modular game construction kit. By Marcel Hauf.
- terrago - Terrain generator. By David Peter.
- rog - Roguelike game library. By Joseph Hager.
- glop - Glop (Game Library Of Power) is a cross-platform game library. By Mob Rule Games.
- GarageEngine - Game engine. By Vovchik.
Path Finding
- astar - Implementation of the A* (A star) pathfinding algorithm. By the Eurobot-NTNU 2012 team.
- gopathfinding - Small package that implements pathfinding algorithms. By Alex Plugaru.
Text and String Manipulation
- sre2 - Reimplementation in Go of Russ Cox’s RE2 C++ regular expressions library. By Sam Thorogood.
- go-luapatterns - A ‘translation’/reimplementation in Go of Lua’s string pattern matching, including non-greedy matching. By Jim Whitehead II.
- scanner - A text scanner that parses primitive types, analogous to Java’s
java.util.Scanner
or C’s scanf(3). By yukuku. - gostrutils - A package containing StringTokens and StringBuffer analogous to StringTokenizer and StringBuffer in Java. By Abiola Ibrahim.
- go substrs - A container for substring results of pattern matching operations. By James Frasche.
- pystring - Python-like string objects for Go
Charset and Text Encoding Conversion
- go-charset - Library to convert various character encoding to and from UTF-8, based on Inferno’s convcs. By Rog Peppe.
- mahonia - Character-set conversion library. By Andy Balholm.
Text Formatting
- markdown - A translation of peg-markdown to Go. By knieriem.
- blackfriday - Translation of the the upskirt C library to Go. By Russ Ross.
XML
- go-pkg-xmlx - Extension to the standard Go XML package. Maintains a node tree that allows forward/backwards browser and exposes some simpel single/multi-node search functions. By Jim Teeuwen.
- xmlm - Struct marshaling and unmarshaling to and from XML, depends on xmlx. By Daniel Smith.
RPC
- go-xmlrpc - Rudimentary client and server implementation of the XML-RPC protocol. By Daniel Smith.
- http_jsonrpc.go - JSONRPC server library with support for Service Mapping Descriptions. By Taru Karttunen.
Operating System Specific Interfaces
- goplan9 - Go libraries for interacting with Plan 9. By Russ Cox and Rob Pike.
- go-sysuser - Access Unix user information from the databases passwd, group, shadow, and gswadow. By John Mac.
Configuration Files
- goconfig - Another fork of goconfig with more features and better documentaiton. By John Mac.
- goconf - A fork of
goconfig
that updates it to build with newer Go release and adds some new features. By Stephen Weinberg (aka smw). - goconfig - Parser for ‘configuration’ files with a format similar to Windows INI files. By Miguel Branco.
Scientific Modeling and Simulation
- GoGCM - A General Circulation Model (GCM). By Arrow.
Other Sciences
- go-eco - Functions for use in (paleo)ecology. Similarity / distance matrices; diversity measures. By Peter A. Cejchan.
- cartconvert - Cartography functions to manipulate coordinates. By Johann Höchtl.
Misc
- pretty.go - Pretty-printing for Go values. By Keith Rarick.
- tamias - A port of Chipmunk Physics to Go. By Beoran.
- tideland-cgl - Tideland Common Go Library. By themue.
- go-pkg-mpd - A library to access the MPD music daemon. By Jim Teeuwen.
- Go MapReduce - Simple implementation of MapReduce. By Dan Bravender.
- bigendian - Binary parsing/printing. By Taru Karttunen.
- captcha - Library to generate and verify image and audio CAPTCHAs. By Dmitry Chestnykh.
- gosms - A package to send SMS using the bulksms.com API. By Leon Szpilewski.
- finance - Package for finantial operations, including a Money type with a fixed-length guard for precision arithmetic. By Confunctionist.
- dbus-go - D-Bus library. By Nigel Tao and other members of the Go team.