CONTRIBUTING.md | ||
LICENSE | ||
README.md |
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
- Networking
- OpenGL
- ORM
- Package Management
- Science and Data Analysis
- Serialization
- Template Engines
- Testing
- Text Processing
- Third-party APIs
- Utilities
- Video
- Web Frameworks
- Windows
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.
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 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.
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 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
- 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.
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
- github_flavored_markdown - GitHub Flavored Markdown renderer 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).
- yaml - Implements a YAML 1.2 parser in Go.
- blackfriday - Markdown processor in Go
- Utility
- 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.
- 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.
- 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 anyio.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 Go’s 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.
- 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
- 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.
Conferences
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.
Windows
- go-ole - Win32 OLE implementation for golang
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