Awesome Golang Collection
Go to file
Thiago Avelino f78c8a44dc Merge pull request #187 from oligot/golang-book
Add An Introduction to Programming in Go
2014-10-02 11:10:41 -03:00
CONTRIBUTING.md New draft of the contribution guidelines 2014-07-07 09:00:13 -06:00
LICENSE Initial commit 2014-07-06 10:42:15 -03:00
README.md Add An Introduction to Programming in Go 2014-10-02 08:41:59 +02:00

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

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.
  • go.auth - Authentication API for Go web applications.
  • 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.

CSS Preprocessors

Libraries for preprocessing CSS files

  • gcss - Pure Go CSS Preprocessor.

CUI

Libraries for building CUI Applications

  • chalk - Intuitive package for prettifying terminal/console output.
  • 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

Generic data structures and algorithms for databases in Go.

  • bitset - Go package implementing bitsets.
  • bloom - Bloom filters implemented in Go.
  • encoding - Integer Compression Libraries for Go.

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.
  • tiedot - Your NoSQL database powered by Golang.

Database tools.

  • vitess - vitess provides servers and tools which facilitate scaling of MySQL databases for large scale web services.

Database Drivers

Libraries for connecting and operating databases. (see Testing for mock drivers)

  • Relational Databases

    • go-adodb - Microsoft ActiveX Object DataBase driver for go that using exp/sql.
    • go-mssqldb - Microsoft MSSQL driver prototype in go language.
    • go-oci8 - Oracle driver for go that using database/sql.
    • 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.
    • go-couchbase - Couchbase client in Go
    • 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.

Distributed Systems

Packages that help with building Distributed Systems.

  • goraft - A Go implementation of the Raft distributed consensus protocol.
  • raft - Golang implementation of the Raft consensus protocol, by HashiCorp.

Email

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
  • gisp - Simple LISP 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.

  • bind - Bind form data to any Go values
  • 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.

  • gift - Package of image processing filters.
  • 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.
  • go-gd - Go binding for GD library

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.
  • gobrain - Neural Networks written in 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.
  • goRecommend - Recommendation Algorithms library written in Go.
  • 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

Networking

Libraries for working with various layers of the network

  • dns - Go library for working with DNS
  • gopacket - A Go library for packet processing with libpacp bindings
  • gopcap - A Go wrapper for libpcap
  • gosnmp - Native Go library for performing SNMP actions

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 interfacepq/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
  • goraph - A pure Go graph theory library(data structure, algorith visualization)
  • 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.

Serialization

Libraries and tools for binary serialization

  • cbor - Golang library for working with cbor binary format
  • gogoprotobuf - Protocol Buffers for Go with Gadgets
  • goprotobuf - Go support, in the form of a library and protocol compiler plugin, for Google's protocol buffers.
  • php_session_decoder - GoLang library for working with PHP session format and PHP Serialize/Unserialize functions

Template Engines

Libraries and tools for templating and lexing.

  • ace - Ace is an HTML template engine for Go, inspired by Slim and Jade. Ace is a refinement of Gold.
  • amber - Amber is an elegant templating engine for Go Programming Language It is inspired from HAML 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
    • goblin - Mocha like testing framework fo 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 interactions

Text Processing

Libraries for parsing and manipulating texts.

  • Specific Formats
    • blackfriday - Markdown processor in Go
    • bluemonday - HTML Sanitizer
    • gographviz - Parses the Graphviz DOT language.
    • 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.
    • GoQuery - GoQuery brings a syntax and a set of features similar to jQuery to the Go language.
    • go-runewidth - Functions to get fixed width of the character or string.
    • slug - URL-friendly slugify with multiple languages support.
    • toml - TOML configuration format (encoder/decoder with reflection).
  • Utility
    • gotabulate - Easily pretty-print your tabular data with Go.
    • govalidator - package of string validators and sanitizers for Go lang.

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.
  • gostorm - GoStorm is a Go library that implements the communications protocol required to write Storm spouts and Bolts in Go that communicate with the Storm shells.
  • hipchat - This project implements a golang client library for the Hipchat API.
  • hipchat (xmpp) - A golang package to communicate with HipChat over XMPP.
  • mixpanel - Mixpanel is a library for tracking events and sending Mixpanel profile updates to Mixpanel from your go applications.
  • rrdaclient - Go Library to access statdns.com API, which is in turn RRDA API. DNS Queries over HTTP.
  • smite - Go package to wraps access to the Smite game API.
  • snapchat - Go wrapper for the snapchat API

Utilities

General utilities and tools to make your life easier.

  • cli - A small package for building command line apps in Go.
  • cli-init - The easy way to start building Golang command-line application.
  • coop - Cheat sheet for some of the common concurrent flows in Go.
  • godropbox - Common libraries for writing Go services/applications from Dropbox.
  • gopencils - Small and simple package to easily consume REST APIs.
  • goreq - Minimal and simple request library for Go language.
  • gorequest - Simplified HTTP client with rich features for Go.
  • gotenv - Load environment variables from .env or any io.Reader in Go
  • go-debug - Conditional debug logging for Golang libraries & applications
  • go-dry - DRY (don't repeat yourself) package for Go.
  • go-underscore - A useful collection of helpfully functional Go collection utilities.
  • lrserver - LiveReload server for Go
  • mp - A simple cli email parser. It currently takes stdin and outputs JSON.
  • ngrok - Introspected tunnels to localhost.
  • peco - Simplistic interactive filtering tool
  • profile - Simple profiling support package for Go
  • sqlx - provides a set of extensions on top of the excellent built-in database/sql package
  • xlsx - Library to simplify reading the XML format used by recent version of Microsoft Excel in Go programs.

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.
  • Goat - A minimalistic REST API server in Go
  • 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-relax - A framework of pluggable components to build RESTful API's
  • 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 Gos net/http library, by the author of Sinatra.
  • Revel - A high-productivity web framework for the Go language.
  • sawsij - lightweight, open-source web framework for building high-performance, data-driven web applications.
  • 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.
  • go-wrap - Small middlewares package for net/http.
  • interpose - Minimalist net/http middleware for golang
  • 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.
  • errcheck - Errcheck is a program for checking for unchecked errors in Go programs.
  • goast-viewer - Web based Golang AST visualizer.
  • GoCover.io - GoCover.io offers the code coverage of any golang package as a service.
  • goimports - Tool to fix (add, remove) your Go imports automatically.
  • GoLint - Golint is a linter for Go source code.
  • Golint online - Lints online Go source files on GitHub, Bitbucket and Google Project Hosting using the golint package.
  • 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.
  • GoBuild - Online compile Go projects to Windows, Linux and MacOSX.
  • godbg - Web-based gdb front-end application.
  • Gogs - A Self Hosted Git Service in the Go Programming Language.
  • gonative - Tool which creates a build of Go that can cross compile to all platforms while still using the Cgo-enabled versions of the stdlib packages.
  • 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.
  • Packer - Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.
  • Rodent - Rodent helps you manage Go versions, projects and track dependencies.

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.
  • gocc - Gocc is a compiler kit for Go written in Go.
  • [Gor] (https://github.com/buger/gor) - Http traffic replication tool, for replaying traffic from production to stage/dev environments in real-time.
  • [heka] (https://github.com/mozilla-services/heka) - universal tool for data processing from Mozilla. Large collection of built-in plugins. Extendable via Go and Lua plugin API.
  • Juju - Cloud-agnostic service deployment and orchestration - supports EC2, Azure, Openstack, MAAS and more.
  • nsq - A realtime distributed messaging platform
  • peg - Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator.
  • Postman - Command-line utility for batch-sending email.
  • syncthing - An open, decentralized file synchronization tool and protocol.
  • Tenyks - Service oriented IRC bot using Redis and JSON for messaging.
  • tsuru - An extensible and open source Platform as a Service software.

Resources

Where to discover new Go libraries.

Benchmarks

Conferences

E-Books

Twitter

Websites

Windows

  • go-ole - Win32 OLE implementation for golang

Tutorials