Awesome Go
A curated list of awesome Go frameworks, libraries and software. Inspired by awesome-python.
Contributing
Please take a quick gander at the contribution guidelines first. Thanks to all contributors; you rock!
Contents
-
- Audio & Music
- Authentication & OAuth
- CUI
- Database
- Database Drivers
- Date & Time
- Embeddable Scripting Languages
- Forms
- Game Development
- Generation & Generics
- GUI
- Images
- Logging
- Machine Learning
- Messaging
- Natural Language Processing
- OpenGL
- ORM
- Package Management
- Science and Data Analysis
- Template Engines
- Testing
- Text Processing
- Third-party APIs
- Utilities
- Video
- Web Frameworks
Audio/Music
Libraries for manipulating audio.
- flac - A native Go FLAC decoder.
- go-sox - libsox bindings for go.
- PortAudio - Go bindings for the PortAudio audio I/O library.
- portmidi - Go bindings for PortMidi.
- vorbis - A "native" Go Vorbis decoder (uses CGO, but has no dependencies).
Authentication & OAuth
Libraries for implementing authentications schemes.
- Go-AWS-Auth - AWS (Amazon Web Services) request signing library.
- httpauth - HTTP Authentication middleware.
- jwt-go - Golang implementation of JSON Web Tokens (JWT).
- oauth2 - Successor of goauth2. Generic OAuth 2.0 package that comes with JWT, Google APIs, Compute Engine and App Engine support.
- osin - Golang OAuth2 server library.
CUI
Libraries for building CUI Applications
- color Versatile package for colored terminal output.
- go-colortext - Go library for color output in terminals.
- termbox-go - Termbox is a library for creating cross-platform text-based interfaces.
Database
Databases implemented in Go.
- bolt - A low-level key/value database for Go.
- diskv - A home-grown disk-backed key-value store.
- go-cache - An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.
- goleveldb - An implementation of the LevelDB key/value database in the Go.
- groupcache - Groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.
- influxdb - Scalable datastore for metrics, events, and real-time analytics
- ledisdb - Ledisdb is a high performance NoSQL like Redis based on LevelDB.
- skydb.io - Sky is an open source database used for flexible, high performance analysis of behavioral data.
- tiedot - Your NoSQL database powered by Golang.
Database Drivers
Libraries for connecting and operating databases. (see Testing for mock drivers)
-
Relational Databases
- go-pgsql - A PostgreSQL client package for the Go Programming Language.
- go-sql-driver/mysql - MySQL driver for Go.
- go-sqlite3 - SQLite3 driver for go that using database/sql.
- pq - Pure Go Postgres driver for database/sql.
-
NoSQL Databases
- cayley - A graph database with support for multiple backends.
- gorethink - Go language driver for RethinkDB
- gomemcache - memcache client library for the Go programming language.
- mgo - MongoDB driver for the Go language that implements a rich and well tested selection of features under a very simple API following standard Go idioms.
- neo4j - Neo4j Rest API Bindings for Golang
- Neo4j-GO - Neo4j REST Client in golang.
- redigo - Redigo is a Go client for the Redis database.
- redis - A simple, powerful Redis client for Go.
Date & Time
Libraries for working with dates and times.
- now - Now is a time toolkit for golang.
Libraries that implement email creation and sending
- email - A robust and flexible email library for Go.
- Go-MailHog - Catches mail and serves it through a dream. Inspired by MailCatcher, easier to install.
- gomail - Gomail provides a very simple API to send emails. It supports attachments, multipart emails and encoding of non-ASCII characters.
Embeddable Scripting Languages
Embedding other languages inside your go code
- agora - Dynamically typed, embeddable programming language in Go
- anko - Scriptable interpreter written in Go
- golua - Go bindings for Lua C API
- go-python - naive go bindings to the CPython C-API
- otto - A JavaScript interpreter written in Go
- v8-go - V8 JavaScript engine bindings for Go
Forms
Libraries for working with forms.
- binding - Binds form and JSON data from net/http Request to struct.
- nosurf - A CSRF protection middleware for Go.
Game Development
Awesome game development libraries.
- GarageEngine - 2d game engine written in Go working on OpenGL.
- glop - Glop (Game Library Of Power) is a fairly simple cross-platform game library.
- go3d - A performance oriented 2D/3D math package for Go
- go-astar - Go implementation of the A* path finding algorithm
Generation & Generics
Tools to enhance the language with features like generics via code generation
- gen - Code generation tool for ‘generics’-like functionality.
- go-linq - .NET LINQ-like query methods for Go.
- pkgreflect - A Go preprocessor for package scoped reflection.
GUI
Libraries for building GUI Applications
- go-gtk - Go bindings for GTK
- gotk3 - Go bindings for GTK3.
- go-qml - QML support for the Go language
- ui - Platform-native GUI library for Go.
Images
Libraries for manipulating images.
- go-cairo - Go binding for the cairo graphics library.
- go-nude - Nudity detection with Go.
- go-opencv - Go bindings for OpenCV.
- go-webcolors - Port of webcolors library from Python to Go.
- img - A selection of image manipulation tools.
- imagick - Go binding to ImageMagick's MagickWand C API.
- imaging - Simple Go image processing package.
- resize - Image resizing for the Go with common interpolation methods.
- rez - Image resizing, functionality similar to resize
- svgo - Go Language Library for SVG generation.
Logging
Libraries for generating and working with log files.
- glog - Leveled execution logs for Go.
- go-log - Log lib supports level and multi handlers.
- logrus - Structured, pluggable logging for Go.
- seelog - logging functionality with flexible dispatching, filtering, and formatting.
- stdlog - Stdlog is an object-oriented library providing leveled logging. It is very useful for cron jobs.
Machine Learning
Libraries for Machine Learning.
- bayesian - Naive Bayesian Classification for Golang.
- CloudForest - Fast, flexible, multi-threaded ensembles of decision trees for machine learning in pure Go.
- go-fann - Go bindings for Fast Artificial Neural Networks(FANN) library.
- go-galib - Genetic Algorithms library written in Go / golang
- golinear - liblinear bindings for Go
- GoLearn - General Machine Learning library for Go.
- go-pr - Pattern recognition package in Go lang.
- libsvm - libsvm golang version derived work based on LIBSVM 3.14.
- mlgo - This project aims to provide minimalistic machine learning algorithms in Go.
- neural-go - A multilayer perceptron network implemented in Go, with training via backpropagation.
- probab - Probability distribution functions. Bayesian inference. Written in pure Go.
- shield - Bayesian text classifier with flexible tokenizers and storage backends for Go
Messaging
Libraries that implement messaging systems
- dbus - Native Go bindings for D-Bus.
- go-nsq - the official Go package for NSQ
- gopush-cluster - gopush-cluster is a go push server cluster.
- NATS - A lightweight and highly performant publish-subscribe and distributed queueing messaging system.
- Uniqush-Push - A redis backed unified push service for server-side notifications to mobile devices.
Natural Language Processing
Libraries for working with human languages.
- go-eco - Similarity, dissimilarity and distance matrices; diversity, equitability and inequality measures; species richness estimators; coenocline models.
- golibstemmer - Go bindings for the snowball libstemmer library including porter 2
- go-nlp - Utilities for working with discrete probability distributions and other tools useful for doing NLP work.
- go-porterstemmer - A native Go clean room implementation of the Porter Stemming algorithm.
- go-stem - Implementation of the porter stemming algorithm.
- gounidecode - Unicode transliterator (also known as unidecode) for Go
- icu - Cgo binding for icu4c C library detection and conversion functions. Guaranteed compatibility with version 50.1.
- libtextcat - Cgo binding for libtextcat C library. Guaranteed compatibility with version 2.2.
- MMSEGO - This is a GO implementation of MMSEG which a Chinese word splitting algorithm.
- paicehusk - Golang implementation of the Paice/Husk Stemming Algorithm
- porter - This is a fairly straighforward port of Martin Porter's C implementation of the Porter stemming algorithm.
- snowball - Snowball stemmer port (cgo wrapper) for Go. Provides word stem extraction functionality Snowball native.
- stemmer - Stemmer packages for Go programming language. Includes English and German stemmers.
- textcat - A Go package for n-gram based text categorization, with support for utf-8 and raw text
OpenGL
Libraries for using OpenGL in Go.
- gl - Go bindings for OpenGL. Requires an external dependency GLEW.
- glfw3 - Go bindings for GLFW 3.
- glow - Go binding generator and bindings for OpenGL.
- mathgl - Pure Go math package specialized for 3D math, with inspiration from GLM.
ORM
Libraries that implement Object-Relational Mapping or datamapping techniques.
- BeeDB - go ORM,support database/sql interface,pq/mysql/sqlite.
- GORM - The fantastic ORM library for Golang, aims to be developer friendly.
- gorp - Go Relational Persistence, ORM-ish library for Go.
- hood - Database agnostic ORM for Go.
- QBS - Stands for Query By Struct. A Go ORM.
- upper.io/db - Single interface for interacting with different data sources through the use of adapters that wrap mature database drivers.
- Xorm - Simple and powerful ORM for Go.
Package Management
Libraries for package and dependency management.
- godep - dependency tool for go, godep helps build packages reproducibly by fixing their dependencies.
- gom - Go Manager - bundle for go.
- goop - A simple dependency manager for Go (golang), inspired by Bundler.
- gpm - Barebones dependency manager for Go.
Science and Data Analysis
Libraries for scientific computing and data analyzing.
- blas - Implementation of BLAS (Basic Linear Algebra Subprograms)
- geom - 2D geometry for golang
- gocomplex - A complex number library for the Go programming language.
- go-fn - Mathematical functions written in Go language, that are not covered by math pkg
- gofrac - A (goinstallable) fractions library for go with support for basic arithmetic.
- go-gt - Graph theory algorithms written in "Go" language
- go.matrix - linear algebra for go
- gostat - A statistics library for the go language
- mudlark-go - A collection of packages providing (hopefully) useful code for use in software using Google's Go programming language.
- plotinum - Plotinum provides an API for building and drawing plots in Go.
- streamtools - general purpose, graphical tool for dealing with streams of data.
- vectormath - Vectormath for Go, an adaptation of the scalar C functions from Sony's Vector Math library, as found in the Bullet-2.79 source code.
Template Engines
Libraries and tools for templating and lexing.
- amber - Amber is an elegant templating engine for Go Programming Language It is inspired from HAML and Jade.
- gold - Gold is a template engine for Go. This simplifies HTML coding in Go web application development. This is influenced by Slim and Jade.
- kasia.go - Templating system for HTML and other text documents - go implementation.
- mustache - A Go implementation of the Mustache template language.
- pongo2 - A Django-like template-engine for Go.
- Razor - Razor view engine for Golang.
- Soy - Closure templates (aka Soy templates) for Go, following the official spec
Testing
Libraries for testing codebases and generating test data.
-
Testing Frameworks
- assert - Asserts to Go testing
- ginkgo - BDD Testing Framework for Go
- gocheck - A more advanced testing framework alternative to gotest.
- GoConvey - BDD-style framework with web UI and live reload
- GoSpec - BDD-style testing framework for the Go programming language.
- gospecify - This provides a BDD syntax for testing your Go code. It should be familiar to anybody who has used libraries such as rspec.
- Hamcrest - fluent framework for declarative Matcher objects that, when applied to input values, produce self-describing results.
- restit - A Go micro framework to help writing RESTful API integration test.
- Testify - A sacred extension to the standard go testing package.
-
Mock
- counterfeiter - Tool for generating self-contained mock objects
- gomock - Mocking framework for the Go programming language.
- mockhttp.go - Mock object for Go http.ResponseWriter
- go-sqlmock - Mock SQL driver for testing database transactions
Text Processing
Libraries for parsing and manipulating texts.
- Specific Formats
- blackfriday - Markdown processor in Go
- github_flavored_markdown - GitHub Flavored Markdown renderer in Go.
- bluemonday - HTML Sanitizer
- go-humanize - Formatters for time, numbers, and memory size to human readable format.
- go-pkg-rss - This package reads RSS and Atom feeds and provides a caching mechanism that adheres to the feed specs.
- go-pkg-xmlx - Extension to the standard Go XML package. Maintains a node tree that allows forward/backwards browsing and exposes some simple single/multi-node search functions.
- slug - URL-friendly slugify with multiple languages support.
- toml - TOML configuration format (encoder/decoder with reflection).
- yaml - Implements a YAML 1.2 parser in Go.
- blackfriday - Markdown processor in Go
- Utility
Third-party APIs
Libraries for accessing third party APIs.
- facebook - Go Library that supports the Facebook Graph API
- github - Go library for accessing the GitHub API.
- hipchat - This project implements a golang client library for the Hipchat API.
- hipchat (xmpp) - A golang package to communicate with HipChat over XMPP.
Utilities
General utilities and tools to make your life easier.
- cli - A small package for building command line apps in Go.
- coop - Cheat sheet for some of the common concurrent flows in Go.
- go-dry - DRY (don't repeat yourself) package for Go.
- mp - A simple cli email parser. It currently takes stdin and outputs JSON.
Video
Libraries for manipulating video.
- aac/h264 - Golang aac/h264 encoder and decoder.
- gmf - Go bindings for FFmpeg av* libraries.
- gst - Go bindings for GStreamer.
Web Frameworks
Full stack web frameworks.
- Beego - beego is an open-source, high-performance web framework for the Go programming language.
- Gin - Gin is a web framework written in Go! It features a martini-like API with much better performance, up to 40 times faster. If you need performance and good productivity.
- gocraft/web - A mux and middleware package in Go.
- Goji - Goji is a minimalistic web framework for Golang that's high in antioxidants.
- Gorilla - Gorilla is a web toolkit for the Go programming language.
- go-rest - A small and evil REST framework for Go
- httprouter - A high performance router. Use this and the standard http handlers to form a very high performance web framework.
- mango - Mango is a modular web-application framework for Go, inspired by Rack, and PEP333.
- Martini - Martini is a powerful package for quickly writing modular web applications/services in Golang.
- pat - Sinatra style pattern muxer for Go’s net/http library, by the author of Sinatra.
- Revel - A high-productivity web framework for the Go language.
- tigertonic - A Go framework for building JSON web services inspired by Dropwizard
- traffic - Sinatra inspired regexp/pattern mux and web framework for Go.
- web.go - A simple framework to write webapps in Go.
Middlewares
Libraries for creating HTTP middlewares.
- alice - Painless middleware chaining for Go.
- muxchain - Lightweight middleware for net/http.
- negroni - Idiomatic HTTP Middleware for Golang.
- render - Go package for easily rendering JSON, XML, and HTML template responses.
Tools
Go software and plugins.
Code Analysis
- doc - Go documentation tool that produces an alternative doc format.
- goast-viewer - Web based Golang AST visualizer.
- goimports - Tool to fix (add, remove) your Go imports automatically.
- GoLint - Golint is a linter for Go source code.
- validate - Automatically validates struct fields with tags.
Editor Plugins
- go-lang-idea-plugin Go plugin for IntelliJ IDEA.
- gocode - An autocompletion daemon for the Go programming language
- GoSublime - A Golang plugin collection for the text editor SublimeText 2 providing code completion and other IDE-like features.
- velour - An IRC client for the acme editor.
- vim-compiler-go - A Vim plugin to highlight syntax errors on save.
- vim-go - Go development plugin for Vim.
- Watch - Runs a command in an acme win on file changes.
Software Packages
Software written in Go.
DevOps Tools
- aptly - aptly is a Debian repository management tool
- Boom - Boom is a tiny program that sends some load to a web application.
- gaudi - Gaudi automates the setup of isolated and decoupled dev environments.
- gobrew - gobrew lets you easily switch between multiple versions of go.
- godbg - Web-based gdb front-end application.
- Gogs - A Self Hosted Git Service in the Go Programming Language.
- go-selfupdate - Enable your Go applications to self update.
- gox - A dead simple, no frills Go cross compile tool.
- goxc - build tool for Go, with a focus on cross-compiling and packaging.
- GVM - GVM provides an interface to manage Go versions.
- hk - Heroku command-line interface in Go.
- Mora - REST server for accessing MongoDB documents and meta data.
Other Software
- Circuit - Circuit is a programmable platform-as-a-service (PaaS) and/or Infrastructure-as-a-Service (IaaS), for management, discovery, synchronization and orchestration of services and hosts comprising cloud applications.
- confd - Manage local application configuration files using templates and data from etcd or consul.
- Docker - An open platform for distributed applications for developers and sysadmins.
- etcd - A highly-available key value store for shared configuration and service discovery.
- fleet - A Distributed init System.
- juju - Configure, deploy, manage and monitor Openstack infrastructure.
- nsq - A realtime distributed messaging platform
- Postman - Command-line utility for batch-sending email.
- syncthing - An open, decentralized file synchronization tool and protocol.
- tsuru - An extensible and open source Platform as a Service software.
Resources
Where to discover new Go libraries.
Benchmarks
- autobench - Framework to compare the performance between different Go versions.
- go-http-routing-benchmark - Go HTTP request router benchmark and comparison.
- go_serialization_benchmarks - Benchmarks of Go serialization methods.
- go-type-assertion-benchmark - Naive performance test of two ways to do type assertion in Go.
- kvbench - Key/Value database benchmark.
- speedtest-resize - Compare various Image resize algorithms for the Go language.
E-Books
Websites
- awesome-awesomeness - List of other amazingly awesome lists.
- Flipboard - Go Magazine - A collection of Go articles and tutorials.
- godoc.org - Documentation for open source Go packages.
- golang-nuts - Go mailing list
- Go Projects - List of projects on the Go community wiki
- r/Golang - News about Go.
- Trending Go repositories on GitHub today - Good place to find new Go libraries.
- go generate - A proposed code generation syntax from Rob Pike.
Tutorials
- A Tour of Go - Interactive tour of Go
- Go By Example - A hands-on introduction to Go using annotated example programs
- Working with Go - An intro to go for experienced programmers