1 # Go kit [![Circle CI](https://circleci.com/gh/go-kit/kit.svg?style=shield)](https://circleci.com/gh/go-kit/kit) [![Travis CI](https://travis-ci.org/go-kit/kit.svg?branch=master)](https://travis-ci.org/go-kit/kit) [![GoDoc](https://godoc.org/github.com/go-kit/kit?status.svg)](https://godoc.org/github.com/go-kit/kit) [![Coverage Status](https://coveralls.io/repos/go-kit/kit/badge.svg?branch=master&service=github)](https://coveralls.io/github/go-kit/kit?branch=master) [![Go Report Card](https://goreportcard.com/badge/go-kit/kit)](https://goreportcard.com/report/go-kit/kit) [![Sourcegraph](https://sourcegraph.com/github.com/go-kit/kit/-/badge.svg)](https://sourcegraph.com/github.com/go-kit/kit?badge)
3 **Go kit** is a **programming toolkit** for building microservices
4 (or elegant monoliths) in Go. We solve common problems in distributed
5 systems and application architecture so you can focus on delivering
8 - Website: [gokit.io](https://gokit.io)
9 - Mailing list: [go-kit](https://groups.google.com/forum/#!forum/go-kit)
10 - Slack: [gophers.slack.com](https://gophers.slack.com) **#go-kit** ([invite](https://gophersinvite.herokuapp.com/))
14 Go has emerged as the language of the server, but it remains underrepresented
15 in so-called "modern enterprise" companies like Facebook, Twitter, Netflix, and
16 SoundCloud. Many of these organizations have turned to JVM-based stacks for
17 their business logic, owing in large part to libraries and ecosystems that
18 directly support their microservice architectures.
20 To reach its next level of success, Go needs more than simple primitives and
21 idioms. It needs a comprehensive toolkit, for coherent distributed programming
22 in the large. Go kit is a set of packages and best practices, which provide a
23 comprehensive, robust, and trustable way of building microservices for
24 organizations of any size.
27 [the website](https://gokit.io),
28 [the motivating blog post](http://peter.bourgon.org/go-kit/) and
29 [the video of the talk](https://www.youtube.com/watch?v=iFR_7AKkJFU).
31 [Go kit talk at GopherCon 2015](https://www.youtube.com/watch?v=1AjaZi4QuGo).
35 - Operate in a heterogeneous SOA — expect to interact with mostly non-Go-kit services
36 - RPC as the primary messaging pattern
37 - Pluggable serialization and transport — not just JSON over HTTP
38 - Operate within existing infrastructures — no mandates for specific tools or technologies
42 - Supporting messaging patterns other than RPC (for now) — e.g. MPI, pub/sub, CQRS, etc.
43 - Re-implementing functionality that can be provided by adapting existing software
44 - Having opinions on operational concerns: deployment, configuration, process supervision, orchestration, etc.
48 Please see [CONTRIBUTING.md](/CONTRIBUTING.md).
49 Thank you, [contributors](https://github.com/go-kit/kit/graphs/contributors)!
51 ## Dependency management
53 Go kit is a library, designed to be imported into a binary package. Vendoring
54 is currently the best way for binary package authors to ensure reliable,
55 reproducible builds. Therefore, we strongly recommend our users use vendoring
56 for all of their dependencies, including Go kit. To avoid compatibility and
57 availability issues, Go kit doesn't vendor its own dependencies, and
58 doesn't recommend use of third-party import proxies.
60 There are several tools which make vendoring easier, including
61 [dep](https://github.com/golang/dep),
62 [gb](http://getgb.io),
63 [glide](https://github.com/Masterminds/glide),
64 [gvt](https://github.com/FiloSottile/gvt), and
65 [govendor](https://github.com/kardianos/govendor).
66 In addition, Go kit uses a variety of continuous integration providers
67 to find and fix compatibility problems as soon as they occur.
71 Projects with a ★ have had particular influence on Go kit's design (or vice-versa).
73 ### Service frameworks
75 - [gizmo](https://github.com/nytimes/gizmo), a microservice toolkit from The New York Times ★
76 - [go-micro](https://github.com/myodc/go-micro), a microservices client/server library ★
77 - [gotalk](https://github.com/rsms/gotalk), async peer communication protocol & library
78 - [Kite](https://github.com/koding/kite), a micro-service framework
79 - [gocircuit](https://github.com/gocircuit/circuit), dynamic cloud orchestration
81 ### Individual components
83 - [afex/hystrix-go](https://github.com/afex/hystrix-go), client-side latency and fault tolerance library
84 - [armon/go-metrics](https://github.com/armon/go-metrics), library for exporting performance and runtime metrics to external metrics systems
85 - [codahale/lunk](https://github.com/codahale/lunk), structured logging in the style of Google's Dapper or Twitter's Zipkin
86 - [eapache/go-resiliency](https://github.com/eapache/go-resiliency), resiliency patterns
87 - [sasbury/logging](https://github.com/sasbury/logging), a tagged style of logging
88 - [grpc/grpc-go](https://github.com/grpc/grpc-go), HTTP/2 based RPC
89 - [inconshreveable/log15](https://github.com/inconshreveable/log15), simple, powerful logging for Go ★
90 - [mailgun/vulcand](https://github.com/vulcand/vulcand), programmatic load balancer backed by etcd
91 - [mattheath/phosphor](https://github.com/mondough/phosphor), distributed system tracing
92 - [pivotal-golang/lager](https://github.com/pivotal-golang/lager), an opinionated logging library
93 - [rubyist/circuitbreaker](https://github.com/rubyist/circuitbreaker), circuit breaker library
94 - [Sirupsen/logrus](https://github.com/Sirupsen/logrus), structured, pluggable logging for Go ★
95 - [sourcegraph/appdash](https://github.com/sourcegraph/appdash), application tracing system based on Google's Dapper
96 - [spacemonkeygo/monitor](https://github.com/spacemonkeygo/monitor), data collection, monitoring, instrumentation, and Zipkin client library
97 - [streadway/handy](https://github.com/streadway/handy), net/http handler filters
98 - [vitess/rpcplus](https://godoc.org/github.com/youtube/vitess/go/rpcplus), package rpc + context.Context
99 - [gdamore/mangos](https://github.com/gdamore/mangos), nanomsg implementation in pure Go
103 - [Gorilla](http://www.gorillatoolkit.org)
104 - [Gin](https://gin-gonic.github.io/gin/)
105 - [Negroni](https://github.com/codegangsta/negroni)
106 - [Goji](https://github.com/zenazn/goji)
107 - [Martini](https://github.com/go-martini/martini)
108 - [Beego](http://beego.me/)
109 - [Revel](https://revel.github.io/) (considered [harmful](https://github.com/go-kit/kit/issues/350))
111 ## Additional reading
113 - [Architecting for the Cloud](http://fr.slideshare.net/stonse/architecting-for-the-cloud-using-netflixoss-codemash-workshop-29852233) — Netflix
114 - [Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html) — Google
115 - [Your Server as a Function](http://monkey.org/~marius/funsrv.pdf) (PDF) — Twitter
119 Development supported by [DigitalOcean](https://digitalocean.com).