.travis.yml | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md | ||
repo_test.go | ||
repo.go |
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!
Join us on Slack to chat with other awesome-go maintainers!
If you see a package or project here that is no longer maintained or is not a good fit, please submit a pull request to improve this file. Thank you!
Contents
-
- Audio & Music
- Authentication & OAuth
- Command Line
- Configuration
- Continuous Integration
- CSS Preprocessors
- Data Structures
- Database
- Database Drivers
- Date & Time
- Distributed Systems
- Embeddable Scripting Languages
- Financial
- Forms
- Game Development
- Generation & Generics
- GUI
- Hardware
- Images
- Logging
- Machine Learning
- Messaging
- Miscellaneous
- Natural Language Processing
- Networking
- OpenGL
- ORM
- Package Management
- Resource Embedding
- Science and Data Analysis
- Security
- Serialization
- Storage Management
- Template Engines
- Testing
- Text Processing
- Third-party APIs
- Utilities
- Validation
- Version Control
- 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.
- taglib - Go bindings for taglib.
- vorbis - A "native" Go Vorbis decoder (uses CGO, but has no dependencies).
- waveform - Go package capable of generating waveform images from audio streams.
Authentication & OAuth
Libraries for implementing authentications schemes.
- Go-AWS-Auth - AWS (Amazon Web Services) request signing library.
- go-jose - A fairly complete implementation of the JOSE working group's JSON Web Token, JSON Web Signatures, and JSON Web Encryption specs.
- go.auth - Authentication API for Go web applications.
- gorbac - provides a lightweight role-based access control (RBAC) implementation in Golang.
- goth - provides a simple, clean, and idiomatic way to use OAuth and OAuth2. Handles multiple provides out of the box.
- 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.
- permissions2 - Library for keeping track of users, login states and permissions. Uses secure cookies and bcrypt.
- yubigo - a Yubikey client package that provides a simple API to integrate the Yubico Yubikey into a go application.
Command Line
Standard CLI
Libraries for building standard or basic Command Line applications
- cli-init - The easy way to start building Golang command line application.
- cobra - A Commander for modern Go CLI interactions
- codegangsta/cli - A small package for building command line apps in Go.
- kingpin - A command line and flag parser supporting sub commands.
- liner - A Go readline-like library for command-line interfaces.
- mitchellh/cli - A Go library for implementing command-line interfaces.
- ukautz/clif - A small command line interface framework.
Advanced Console UIs
Libraries for building Console Applications and Console User Interfaces
- chalk - Intuitive package for prettifying terminal/console output.
- color - Versatile package for colored terminal output.
- go-colortext - Go library for color output in terminals.
- gocui - Minimalist Go library aimed at creating Console User Interfaces.
- gommon/color - Style terminal text.
- termbox-go - Termbox is a library for creating cross-platform text-based interfaces.
- termtables - A Go port of the Ruby library terminal-tables for simple ASCII table generation as well as providing markdown and HTML output
- termui - Go terminal dashboard based on termbox-go and inspired by blessed-contrib.
Configuration
Libraries for configuration parsing
- config - JSON or YAML configuration wrapper with environment variables and flags parsing.
- env - Parse environment variables to Go structs (with defaults).
- envcfg - Un-marshaling environment variables to Go structs.
- envconf - Configuration from environment
- envconfig - Read your configuration from environment variables.
- gofigure - Go application configuration made easy
- ini - Go package for read and write INI files
- mini - A golang package for parsing ini-style configuration files
- viper - Go configuration with fangs
Continuous Integration
Tools for help with continuous integration
- goveralls - Go integration for Coveralls.io continuous code coverage tracking system.
- overalls - Multi-Package go project coverprofile for tools like goveralls
CSS Preprocessors
Libraries for preprocessing CSS files
- c6 - High performance SASS compatible-implementation compiler written in Go
- gcss - Pure Go CSS Preprocessor.
Data Structures
Generic datastructures and algorithms in Go.
- bitset - Go package implementing bitsets.
- bloom - Bloom filters implemented in Go.
- boomfilters - probabilistic data structures for processing continuous, unbounded streams
- cuckoofilter - Cuckoo filter: a good alternative to a counting bloom filter implemented in Go.
- encoding - Integer Compression Libraries for Go.
- go-datastructures - a collection of useful, performant, and thread-safe data structures
- golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go.
- goskiplist - A skip list implementation in Go.
- mafsa - MA-FSA implementation with Minimal Perfect Hashing
- skiplist - Skiplist implementation in Go
- trie - Trie implementation in Go
- ttlcache - An in-memory LRU string-interface{} map with expiration for golang
- willf/bloom - Go package implementing Bloom filters.
Database
Databases implemented in Go.
- bolt - A low-level key/value database for Go.
- cache2go - An in-memory key:value cache which supports automatic invalidation based on timeouts.
- couchcache - A RESTful caching micro-service backed by Couchbase server.
- diskv - A home-grown disk-backed key-value store.
- forestdb - Go bindings for ForestDB.
- GCache - Cache library with support for expirable Cache, LFU, LRU and ARC.
- 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.
- levigo - Levigo is a Go wrapper for LevelDB.
- tidb - TiDB is a distributed SQL database. Inspired by the design of Google F1.
- tiedot - Your NoSQL database powered by Golang.
Database tools.
- go-mysql - A go toolset to handle MySQL protocol and replication.
- go-mysql-elasticsearch - Sync your MySQL data into Elasticsearch automatically.
- goose - Database migration tool. You can manage your database's evolution by creating incremental SQL or Go scripts.
- kingshard - kingshard is a high performance proxy for MySQL powered by Golang.
- myreplication - MySql binary log replication listener. Support statement and row based replication.
- orchestrator - MySQL replication topology manager & visualizer
- pgweb - A web-based PostgreSQL database browser
- pravasan - Simple Migration tool - currently for MySQL but planning to support soon for Postgres, SQLite, MongoDB, etc.,
- sql-migrate - Database migration tool. Allows embedding migrations into the application using go-bindata.
- vitess - vitess provides servers and tools which facilitate scaling of MySQL databases for large scale web services.
SQL query builder, libraries for building and using SQL.
- Dotsql - Go library that helps you keep sql files in one place and use it with ease.
- goqu - An idiomatic SQL builder and query library.
- scaneo - Generate Go code to convert database rows into arbitrary structs.
- Squirrel - Go library that helps you build SQL queries.
Database Drivers
Libraries for connecting and operating databases.
-
Relational Databases
- firebirdsql - Firebird RDBMS SQL driver for Go
- go-adodb - Microsoft ActiveX Object DataBase driver for go that using database/sql.
- go-bqstreamer - BigQuery fast and concurrent stream insert.
- go-mssqldb - Microsoft MSSQL driver prototype in go language.
- go-oci8 - Oracle driver for go that using database/sql.
- go-sql-driver/mysql - MySQL driver for Go.
- go-sqlite3 - SQLite3 driver for go that using database/sql.
- gofreetds Microsoft MSSQL driver. Go wrapper over FreeTDS.
- pq - Pure Go Postgres driver for database/sql.
-
NoSQL Databases
- aerospike-client-go - Aerospike client in Go language.
- cayley - A graph database with support for multiple backends.
- go-couchbase - Couchbase client in Go
- go-couchdb - Yet another CouchDB HTTP API wrapper for Go
- gocb - Official Couchbase Go SDK
- gocql - A Go language driver for Apache Cassandra.
- gomemcache - memcache client library for the Go programming language.
- gorethink - Go language driver for RethinkDB
- 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.
- neoism - Neo4j client for Golang
- redigo - Redigo is a Go client for the Redis database.
- redis - Redis client for Golang
- redis - A simple, powerful Redis client for Go.
-
Search and Analytic Databases
Date & Time
Libraries for working with dates and times.
- now - Now is a time toolkit for golang.
- timeutil - Useful extensions (Timedelta, Strftime, ...) to the golang's time package.
Distributed Systems
Packages that help with building Distributed Systems.
- flowgraph - MPI-style ready-send coordination layer.
- go-jump - A port of Google's "Jump" Consistent Hash function.
- gorpc - Simple, fast and scalable RPC library for high load.
- grpc-go - The Go language implementation of gRPC. HTTP/2 based RPC.
- raft - Golang implementation of the Raft consensus protocol, by HashiCorp.
- torrent - BitTorrent client package.
- dht - BitTorrent Kademlia DHT implementation.
Libraries that implement email creation and sending
- douceur - CSS inliner for your HTML emails.
- email - A robust and flexible email library for Go.
- go-dkim - A DKIM library, to sign & verify email.
- Gomail - Gomail is a very simple and powerful package to send emails.
- MailHog - Email and SMTP testing with web and API interface
- SendGrid - SendGrid's Go library for sending email
- smtp - SMTP server protocol state machine
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
- go-duktape - Duktape JavaScript engine bindings for Go
- go-lua - A port of the Lua 5.2 VM to pure Go
- go-python - naive go bindings to the CPython C-API
- golua - Go bindings for Lua C API
- gopher-lua - a Lua 5.1 VM and compiler written in Go
- otto - A JavaScript interpreter written in Go
- purl - Perl 5.18.2 embedded in Go
Financial
Packages for accounting and finance
- accounting - money and currency formatting for golang
- decimal - Arbitrary-precision fixed-point decimal numbers
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.
- formam - decode form's values into a struct.
- forms - A framework-agnostic library for parsing and validating form/JSON data which supports multipart forms and files.
- 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.
- go-astar - Go implementation of the A* path finding algorithm
- go-collada - Go package for working with the Collada file format.
- go-sdl2 - Go bindings for the Simple DirectMedia Layer.
- go3d - A performance oriented 2D/3D math package for Go
- gonet - A game server skeleton implemented with golang
- Leaf - A lightweight game server framework
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
- go-qml - QML support for the Go language
- gosx-notifier - OSX Desktop Notifications library for Go.
- gotk3 - Go bindings for GTK3.
- gxui - A Go cross platform UI library.
- ui - Platform-native GUI library for Go.
- walk - Windows application library kit for Go.
Hardware
Libraries, tools, and tutorials for interacting with hardware.
See go-hardware for a comprehensive list.
Images
Libraries for manipulating images.
- bimg - Small package for fast and efficient image processing using libvips
- geopattern - Create beautiful generative image patterns from a string.
- gift - Package of image processing filters.
- go-cairo - Go binding for the cairo graphics library.
- go-gd - Go binding for GD library
- go-nude - Nudity detection with Go.
- go-opencv - Go bindings for OpenCV.
- go-webcolors - Port of webcolors library from Python to Go.
- imagick - Go binding to ImageMagick's MagickWand C API.
- imaginary - Fast and simple HTTP microservice for image resizing
- imaging - Simple Go image processing package.
- img - A selection of image manipulation tools.
- picfit - An image resizing server written in Go
- resize - Image resizing for the Go with common interpolation methods.
- rez - Image resizing in pure Go and SIMD.
- smartcrop - Finds good crops for arbitrary images and crop sizes
- svgo - Go Language Library for SVG generation.
- tga - Package tga is a TARGA image format decoder/encoder.
Logging
Libraries for generating and working with log files.
- glog - Leveled execution logs for Go.
- go-log - Log lib supports level and multi handlers.
- go-log - A log4j implementation in Go.
- go-logger - Simple logger of Go Programs, with level handlers.
- log-voyage - Full-featured logging saas written in golang.
- logex - An golang log lib, supports tracking and level, wrap by standard log lib
- logrus - a structured logger for Go.
- logrusly - logrus plug-in to send errors to a Loggly.
- logutils - Utilities for slightly better logging in Go (Golang) extending the standard logger.
- logxi - A 12-factor app logger that is fast and makes you happy.
- lumberjack - Simple rolling logger, implements io.WriteCloser.
- mlog - A simple logging module for go, with 5 levels, an optional rotating logfile feature and stdout/stderr output.
- 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.
- tail - A Go package striving to emulate the features of the BSD tail program.
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
- go-pr - Pattern recognition package in Go lang.
- gobrain - Neural Networks written in go
- godist - Various probability distributions, and associated methods.
- GoLearn - General Machine Learning library for Go.
- golinear - liblinear bindings for Go
- goml - On-line Machine Learning in Go
- 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.
- regommend - Recommendation & collaborative filtering engine
- 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.
- EventBus - The lightweight event bus with async compatibility.
- go-notify - Native implementation of the freedesktop notification spec.
- go-nsq - the official Go package for NSQ
- gopush-cluster - gopush-cluster is a go push server cluster.
- machinery - An asynchronous task queue/job queue based on distributed message passing.
- NATS - A lightweight and highly performant publish-subscribe and distributed queueing messaging system.
- oplog - A generic oplog/replication system for REST APIs
- pubsub - A simple pubsub package for go.
- sarama - A Go library for Apache Kafka.
- Uniqush-Push - A redis backed unified push service for server-side notifications to mobile devices.
- zmq4 - A Go interface to ZeroMQ version 4. Also available for version 3 and version 2.
Miscellaneous
These libraries were placed here because none of the other categories seemed to fit
- autoflags - Go package to automatically define command line flags from struct fields.
- browscap_go - GoLang Library for Browser Capabilities Project.
- go-flags - go command line option parser
- go-multierror - A Go (golang) package for representing a list of errors as a single error.
- gopsutil - A cross-platform library for retrieving process and system utilization(CPU, Memory, Disks, etc).
- jobs - A persistent and flexible background jobs library.
- notify - File system event notification library with simple API, similar to os/signal.
- xkg - X Keyboard Grabber
- xstrings - A collection of useful string functions ported from other languages.
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.
- go-nlp - Utilities for working with discrete probability distributions and other tools useful for doing NLP work.
- go-stem - Implementation of the porter stemming algorithm.
- golibstemmer - Go bindings for the snowball libstemmer library including porter 2
- 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.
- porter2 - Really fast Porter 2 stemmer.
- segment - A Go library for performing Unicode Text Segmentation as described in Unicode Standard Annex #29
- 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
- arp - Package arp implements the ARP protocol, as described in RFC 826.
- buffstreams - Streaming protocolbuffer data over TCP made easy
- canopus - CoAP Client/Server implementation (RFC 7252)
- dhcp6 - Package dhcp6 implements a DHCPv6 server, as described in RFC 3315.
- dns - Go library for working with DNS
- ethernet - Package ethernet implements marshaling and unmarshaling of IEEE 802.3 Ethernet II frames and IEEE 802.1Q VLAN tags.
- ftp - Package ftp implements a FTP client as described in RFC 959.
- go-stun - A go implementation of the STUN client (RFC 3489 and RFC 5389).
- gopacket - A Go library for packet processing with libpcap bindings
- gopcap - A Go wrapper for libpcap
- gosnmp - Native Go library for performing SNMP actions
- gotcp - A Go package for quickly writing tcp applications
- graval - An experimental FTP server framework.
- linkio - Network link speed simulation for Reader/Writer interfaces
- mdns - Simple mDNS (Multicast DNS) client/server library in Golang
- portproxy - Simple TCP proxy which adds CORS support to API's which don't support it.
- raw - Package raw enables reading and writing data at the device driver level for a network interface.
- sftp - Package sftp implements the SSH File Transfer Protocol as described in https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt.
- tcp_server - A Go library for building tcp servers faster.
- utp - Go uTP micro transport protocol implementation.
OpenGL
Libraries for using OpenGL in Go.
- gl - Go bindings for OpenGL (generated via glow).
- glfw - Go bindings for GLFW 3.
- goxjs/gl - Go cross-platform OpenGL bindings (OS X, Linux, Windows, browsers, iOS, Android).
- goxjs/glfw - Go cross-platform glfw library for creating an OpenGL context and receiving events.
- mathgl - Pure Go math package specialized for 3D math, with inspiration from GLM.
ORM
Libraries that implement Object-Relational Mapping or datamapping techniques.
- beego orm - A powerful orm framework for go.
- go-store - A simple and fast Redis backed key-value store library for Go.
- gomodel - A lightweight, fast, orm-like library helps interactive with database.
- 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.
- Zoom - A blazing-fast datastore and querying engine built on Redis.
Package Management
Libraries for package and dependency management.
- gigo - PIP-like dependency tool for golang, with support for private repositories and hashes.
- 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.
- gopm - Go Package Manager
- gpm - Barebones dependency manager for Go.
- johnny-deps - Minimal dependency version using Git
- nut - Vendor Go dependencies
- VenGO - create and manage exportable isolated go virtual environments
Resource Embedding
- go-bindata - Package that converts any file into managable Go source code.
- go-resources - Unfancy resources embedding with Go.
- go.rice - go.rice is a Go package that makes working with resources such as html,js,css,images and templates very easy.
- vfsgen - Generates a vfsdata.go file that statically implements the given virtual filesystem.
Science and Data Analysis
Libraries for scientific computing and data analyzing.
- blas - Implementation of BLAS (Basic Linear Algebra Subprograms)
- chart - Simple Chart Plotting library for Go. Supports many graphs types.
- evaler - A simple floating point arithmetic expression evaluator
- ewma - Exponentially-weighted moving averages
- geom - 2D geometry for golang
- go-fn - Mathematical functions written in Go language, that are not covered by math pkg
- go-gt - Graph theory algorithms written in "Go" language
- go.matrix - linear algebra for go (has been stalled)
- gocomplex - A complex number library for the Go programming language.
- gofrac - A (goinstallable) fractions library for go with support for basic arithmetic.
- gohistogram - Approximate histograms for data streams
- gonum/mat64 - The general purpose package for matrix computation. Package mat64 provides basic linear algebra operations for float64 matrices.
- gonum/plot - gonum/plot provides an API for building and drawing plots in Go.
- goraph - A pure Go graph theory library(data structure, algorith visualization)
- 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.
- pagerank - Weighted PageRank algorithm implemented 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. (currently inactive)
Security
Libraries that are used to help make your application more secure.
- BadActor - An in-memory, application-driven jailer built in the spirit of fail2ban
- go-yara - Go Bindings for YARA, the "pattern matching swiss knife for malware researchers (and everyone else)"
Serialization
Libraries and tools for binary serialization
- cbor - Golang library for working with cbor binary format
- go-capnproto - Cap'n Proto library and parser for go
- bambam - generator for Cap'n Proto schemas from go.
- 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.
- mapstructure - Go library for decoding generic map values into native Go structures.
- php_session_decoder - GoLang library for working with PHP session format and PHP Serialize/Unserialize functions
- structomap - Library to easily and dynamically generate maps from static structures.
Server Applications
- algernon - HTTP/2 web server with built-in support for Lua, Markdown, GCSS and Amber.
- Caddy - Caddy is an alternative, HTTP/2 web server that's easy to configure and use.
- etcd - A highly-available key value store for shared configuration and service discovery.
- nsq - A realtime distributed messaging platform
- yakvs - A small, networked, in-memory key-value store.
Storage Management
- REX-Ray - A CLI/Daemon/API/Library providing external storage platform management for the lifecycle of remote volumes.
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.
- damsel - Markup language featuring html outlining via css-selectors, extensible via pkg html/template and others.
- ego - A lightweight templating language that lets you write templates in Go. Templates are translated into Go and compiled.
- 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.
- raymond - A complete handlebars implementation in 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 - Basic Assertion Library used along side native go testing, with building blocks for custom assertions
- assert - Asserts to Go testing
- bro - Watch files in directory and run tests for them
- ginkgo - BDD Testing Framework for Go
- go-mutesting - Mutation testing for Go source code
- 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
- godog - Cucumber or Behat like BDD framework for Go.
- 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
- go-sqlmock - Mock SQL driver for testing database interactions
- go-txdb - Single transaction based database driver mainly for testing purposes.
- gomock - Mocking framework for the Go programming language.
- mockhttp - Mock object for Go http.ResponseWriter
-
Fuzzing and delta-debugging/reducing/shrinking
- go-fuzz - A randomized testing system
- gofuzz - A library for populating go objects with random values
- gogenerate - A Scalacheck-like library for Go
- Tavor - A generic fuzzing and delta-debugging framework
Text Processing
Libraries for parsing and manipulating texts.
- Specific Formats
- blackfriday - Markdown processor in Go
- github_flavored_markdown - GitHub Flavored Markdown renderer with fenced code block highlighting, clickable header anchor links.
- bluemonday - HTML Sanitizer
- enca - Minimal cgo bindings for libenca.
- genex - Count and expand Regular Expressions into all matching Strings
- go-humanize - Formatters for time, numbers, and memory size to human readable format.
- go-nmea - NMEA parser library for the Go language.
- 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.
- go-runewidth - Functions to get fixed width of the character or string.
- gographviz - Parses the Graphviz DOT language.
- gommon/gytes - Format bytes to string.
- gonameparts - Parses human names into individual name parts
- GoQuery - GoQuery brings a syntax and a set of features similar to jQuery to the Go language.
- goregen - A library for generating random strings from regular expressions.
- guesslanguage - Functions to determine the natural language of a unicode text.
- mxj - Encode / decode XML as JSON or map[string]interface{}; extract values with dot-notation paths and wildcards. Replaces x2j and j2x packages.
- slug - URL-friendly slugify with multiple languages support.
- Slugify - A Go slugify application that handles string.
- toml - TOML configuration format (encoder/decoder with reflection).
- blackfriday - Markdown processor in Go
- Utility
- gotabulate - Easily pretty-print your tabular data with Go.
- xurls - Extract urls from text
Third-party APIs
Libraries for accessing third party APIs.
- anaconda - A Go client library for the Twitter 1.1 API
- aws-sdk-go - The official AWS SDK for the Go programming language. Caution: The SDK is currently in the process of being developed, and not everything may be working fully yet.
- brewerydb - Go library for accessing the BreweryDB API.
- facebook - Go Library that supports the Facebook Graph API
- gads - Google Adwords Unofficial API
- gami - Go library for Asterisk Manager Interface.
- geo-golang - Go Library to access Google Maps, MapQuest, Nominatim, OpenCage, HERE and Bing geocoding / reverse geocoding APIs.
- github - Go library for accessing the GitHub API.
- go-marathon - A Go library for interacting with Mesosphere's Marathon PAAS
- goamz - Popular fork of goamz which adds some missing API calls to certain packages.
- GoMusicBrainz - a Go MusicBrainz WS2 client library
- google - Auto-generated Google APIs for Go
- google-analytics - A simple wrapper for easy google analytics reporting
- google-cloud - Google Cloud APIs Go Client Library
- 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.
- pushover - Go wrapper for the Pushover API.
- rrdaclient - Go Library to access statdns.com API, which is in turn RRDA API. DNS Queries over HTTP.
- shopify - Go Library to make CRUD request to the Shopify API.
- smite - Go package to wraps access to the Smite game API.
- snapchat - Go wrapper for the snapchat API
- spotify - Go Library to access Spotify WEB API.
- steam - Go Library to interact with Steam game servers.
- stripe - Go client for the Stripe API
- TheMovieDb - A simple golang package to communicate with themoviedb.org
- translate - Go online translation package
- tumblr - Go wrapper for the Tumblr v2 API.
Utilities
General utilities and tools to make your life easier.
- coop - Cheat sheet for some of the common concurrent flows in Go.
- delve - Go debugger.
- fastlz - Wrap over FastLz (free, open-source, portable real-time compression library) for GoLang.
- go-cron - A simple Cron library for go that can execute closures or functions at varying intervals, from once a second to once a year on a specific date and time. Primarily for web applications and long running daemons.
- 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.
- goback - Go simple exponential backoff package.
- godaemon - Utility to write daemons
- godotenv - A Go port of Ruby's dotenv library (Loads environment variables from
.env
.) - godropbox - Common libraries for writing Go services/applications from Dropbox.
- gohper - Various tools/modules help for development.
- golarm - Fire alarms with system events.
- gopencils - Small and simple package to easily consume REST APIs.
- goplaceholder - a small golang lib to generate placeholder images
- 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 - hystrix-go - Imprements Hystrix patterns of programmer-defined fallbacks aka circuit breaker.
- jsonf - Console tool for highlighted formatting and struct query fetching JSON.
- jsongo - Fluent API to make it easier to create Json objects.
- lrserver - LiveReload server for Go
- mp - A simple cli email parser. It currently takes stdin and outputs JSON.
- multitick - Multiplexor for aligned tickers
- netbug - Easy remote profiling of your services.
- ngrok - Introspected tunnels to localhost.
- okrun - go run error steamroller
- panicparse - Groups similar goroutines and colorizes stack dump.
- peco - Simplistic interactive filtering tool
- pester - Go HTTP client calls with retries, backoff, and concurrency
- pm - Process (i.e. goroutine) manager with an HTTP API
- profile - Simple profiling support package for Go
- request - Go HTTP Requests for Humans™.
- robustly - Runs functions resiliently, catching and restarting panics
- scheduler - Cronjobs scheduling made easy.
- sling - Go HTTP requests builder for API clients.
- spinner - Go package to easily provide a terminal spinner with options.
- 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.
Validation
Libraries for validation.
- govalidator - Validators and sanitizers for strings, numerics, slices and structs
- validator - Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving
Version Control
Libraries for version control.
- gh - Scriptable server and net/http middleware for GitHub Webhooks
- git2go - Go bindings for libgit2.
- go-vcs - manipulate and inspect VCS repositories in Go.
- hgo - Hgo is a collection of Go packages providing read-access to local Mercurial repositories.
Video
Libraries for manipulating video.
- aac/h264 - Golang aac/h264 encoder and decoder.
- gmf - Go bindings for FFmpeg av* libraries.
- goav - Comphrensive Go bindings for FFmpeg.
- 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.
- Bone - Lightning Fast HTTP Multiplexer.
- Echo - A fast HTTP router (zero memory allocation) and micro web framework in Go.
- 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.
- Glue - Robust Go and Javascript Socket Library (Alternative to Socket.io)
- go-json-rest - A quick and easy way to setup a RESTful JSON API
- go-relax - A framework of pluggable components to build RESTful API's
- go-rest - A small and evil REST framework for Go
- go-socket.io - socket.io library for golang, a realtime application framework.
- 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.
- Gondola - The web framework for writing faster sites, faster
- goose - Server Sent Events in Go
- Gorilla - Gorilla is a web toolkit for the Go programming language.
- httprouter - A high performance router. Use this and the standard http handlers to form a very high performance web framework.
- Macaron - Macaron is a high productive and modular design web framework in Go.
- 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.
- medeina - Medeina is a HTTP routing tree based on HttpRouter, inspired by Roda and Cuba.
- neo - Neo is minimal and fast Go Web Framework with extremely simple API.
- pat - Sinatra style pattern muxer for Go’s net/http library, by the author of Sinatra.
- Resoursea - A REST framework for quickly writing resource based services.
- Revel - A high-productivity web framework for the Go language.
- rex - Rex is a library for modular development built upon gorilla/mux, fully compatible with
net/http
. - sawsij - lightweight, open-source web framework for building high-performance, data-driven web applications.
- Siesta - Composable framework to write middleware and handlers
- tango - Micro & pluggable web framework for Go.
- 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.
- Zerver - Zerver is a expressive, modular, feature completed RESTful framework.
- zeus - A very simple and fast HTTP router for Go.
Middlewares
Actual middlewares
- CORS - Easily add CORS capabilities to your API
- formjson - Transparently handle JSON input as a standard form POST
- Tollbooth - Rate limit HTTP request handler
- XFF - Handle
X-Forwarded-For
header and friends
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.
- stats - A Go middleware that stores various information about your web application.
Tools
Go software and plugins.
Code Analysis
- doc - Go documentation tool that produces an alternative doc format.
- dupl - A tool for code clone detection.
- errcheck - Errcheck is a program for checking for unchecked errors in Go programs.
- gcvis - Visualise Go program GC trace data in real time.
- Go Metalinter - Metalinter is a tool to automatically apply all static analysis tool and report their output in normalized form.
- 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.
- gostatus - A command line tool, shows the status of repositories that contain Go packages.
- validate - Automatically validates struct fields with tags.
Editor Plugins
- go-lang-idea-plugin Go plugin for IntelliJ IDEA.
- go-plus - Go (Golang) Package For Atom That Adds Autocomplete, Formatting, Syntax Checking, Linting and Vetting
- 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.
Go Tools
- colorgo - A wrapper around
go
command for colorizedgo build
output.
Software Packages
Software written in Go.
DevOps Tools
- aptly - aptly is a Debian repository management tool
- awsenv - a small binary that loads Amazon (AWS) environment variables for a profile
- Boom - Boom is a tiny program that sends some load to a web application.
- dogo - Monitoring changes in the source file and automatically compile and run (restart).
- EasySSH - Golang package for easy remote execution through SSH and SCP downloading.
- gaudi - Gaudi automates the setup of isolated and decoupled dev environments.
- Go Metrics - Go port of Coda Hale's Metrics library: https://github.com/codahale/metrics.
- go-selfupdate - Enable your Go applications to self update.
- 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.
- 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.
- 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.
- ostent - collects and displays system metrics and optionally relays to Graphite and/or InfluxDB
- 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.
- [Vegeta] (https://github.com/tsenart/vegeta) - HTTP load testing tool and library. It's over 9000!
- webhook - Tool which allows user to create HTTP endpoints (hooks) that execute commands on the server
- Wide - A Web-based IDE for Teams using Golang.
Other Software
- boxed - Dropbox based blog engine
- 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.
- Comcast - Simulate bad network connections
- 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.
- fleet - A Distributed init System.
- Go Package Store - An app that displays updates for the Go packages in your GOPATH.
- gocc - Gocc is a compiler kit for Go written in Go.
- Gor - Http traffic replication tool, for replaying traffic from production to stage/dev environments in real-time.
- heka - universal tool for data processing from Mozilla. Large collection of built-in plugins. Extendable via Go and Lua plugin API.
- hugo - A Fast and Modern Static Website Engine
- Juju - Cloud-agnostic service deployment and orchestration - supports EC2, Azure, Openstack, MAAS and more.
- limetext Lime Text is a powerful and elegant text editor primarily developed in Go that aims to be a Free and open-source software successor to Sublime Text.
- naclpipe - A simple NaCL EC25519 based crypto pipe tool written in Go.
- nes - A Nintendo Entertainment System (NES) emulator written in Go.
- orange-cat - A Markdown previewer written in Go.
- peg - Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator.
- plubi - A Golang Plugin Based IRC Bot.
- Postman - Command-line utility for batch-sending email.
- Seaweed File System - Fast, Simple and Scalable Distributed File System with O(1) disk seek.
- shell2http - Executing shell commands via http server (for prototyping or remote control)
- syncthing - An open, decentralized file synchronization tool and protocol.
- Tenyks - Service oriented IRC bot using Redis and JSON for messaging.
- toxiproxy - Proxy to simulate network and system conditions for automated tests.
- tsuru - An extensible and open source Platform as a Service software.
- websysd - Web based process manager (like Marathon or Upstart)
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-type-assertion-benchmark - Naive performance test of two ways to do type assertion in Go.
- go_serialization_benchmarks - Benchmarks of Go serialization methods.
- gocostmodel - Benchmarks of common basic operations for the Go language.
- golang-micro-benchmarks - Tiny collection of Go micro benchmarks. The intent is to compare some language features to others.
- golang-sql-benchmark - A collection of benchmarks for popular Go database/SQL utilities.
- kvbench - Key/Value database benchmark.
- speedtest-resize - Compare various Image resize algorithms for the Go language.
Conferences
- dotGo - Paris, France
- GoCon - Tokyo, Japan
- GolangUK - London, UK
- GopherChina - Shanghai, China
- GopherCon - Denver, USA
- GopherCon India - Bengaluru, India
- GothamGo - New York City, USA
E-Books
- A Go Developer's Notebook
- An Introduction to Programming in Go
- Build Web Application with Golang
- Building Web Apps With Go
- Go Bootcamp
- GoBooks - A curated list of Go books
- Learning Go
- Network Programming With Go
Websites
- Awesome Remote Job - A curated list of awesome remote jobs. A lot of them is looking for Go hackers.
- awesome-awesomeness - List of other amazingly awesome lists.
- Flipboard - Go Magazine - A collection of Go articles and tutorials.
- Go Blog - The official Go blog
- Go Projects - List of projects on the Go community wiki
- godoc.org - Documentation for open source Go packages.
- golang-graphics - A collection of Go images, graphics, and art
- golang-nuts - Go mailing list
- gowalker.org - Go Project API documentation.
- r/Golang - News about Go.
- Trending Go repositories on GitHub today - Good place to find new Go libraries.
Tutorials
- A Tour of Go - Interactive tour of Go
- Go By Example - A hands-on introduction to Go using annotated example programs
- Go database/sql tutorial - Introduction to database/sql
- Working with Go - An intro to go for experienced programmers
Windows
- go-ole - Win32 OLE implementation for golang