1# Go kit
2
3
4[](https://pkg.go.dev/github.com/go-kit/kit?tab=doc)
5[](https://codecov.io/gh/go-kit/kit)
6[](https://goreportcard.com/report/go-kit/kit)
7[](https://sourcegraph.com/github.com/go-kit/kit?badge)
8
9**Go kit** is a **programming toolkit** for building microservices
10(or elegant monoliths) in Go. We solve common problems in distributed
11systems and application architecture so you can focus on delivering
12business value.
13
14- Website: [gokit.io](https://gokit.io)
15- Mailing list: [go-kit](https://groups.google.com/forum/#!forum/go-kit)
16- Slack: [gophers.slack.com](https://gophers.slack.com) **#go-kit** ([invite](https://gophersinvite.herokuapp.com/))
17
18## Sponsors
19
20Click [here](https://github.com/sponsors/peterbourgon) or Sponsor, above, for more information on sponsorship.
21
22## Motivation
23
24Go has emerged as the language of the server, but it remains underrepresented
25in so-called "modern enterprise" companies like Facebook, Twitter, Netflix, and
26SoundCloud. Many of these organizations have turned to JVM-based stacks for
27their business logic, owing in large part to libraries and ecosystems that
28directly support their microservice architectures.
29
30To reach its next level of success, Go needs more than simple primitives and
31idioms. It needs a comprehensive toolkit, for coherent distributed programming
32in the large. Go kit is a set of packages and best practices, which provide a
33comprehensive, robust, and trustable way of building microservices for
34organizations of any size.
35
36For more details, see
37 [the website](https://gokit.io),
38 [the motivating blog post](http://peter.bourgon.org/go-kit/) and
39 [the video of the talk](https://www.youtube.com/watch?v=iFR_7AKkJFU).
40See also the
41 [Go kit talk at GopherCon 2015](https://www.youtube.com/watch?v=1AjaZi4QuGo).
42
43## Goals
44
45- Operate in a heterogeneous SOA — expect to interact with mostly non-Go-kit services
46- RPC as the primary messaging pattern
47- Pluggable serialization and transport — not just JSON over HTTP
48- Operate within existing infrastructures — no mandates for specific tools or technologies
49
50## Non-goals
51
52- Supporting messaging patterns other than RPC (for now) — e.g. MPI, pub/sub, CQRS, etc.
53- Re-implementing functionality that can be provided by adapting existing software
54- Having opinions on operational concerns: deployment, configuration, process supervision, orchestration, etc.
55
56## Contributing
57
58Please see [CONTRIBUTING.md](/CONTRIBUTING.md).
59Thank you, [contributors](https://github.com/go-kit/kit/graphs/contributors)!
60
61## Dependency management
62
63Go kit is [modules](https://github.com/golang/go/wiki/Modules) aware, and we
64encourage users to use the standard modules tooling. But Go kit is at major
65version 0, so it should be compatible with non-modules environments.
66
67## Code generators
68
69There are several third-party tools that can generate Go kit code based on
70different starting assumptions.
71
72- [RecoLabs/microgen](https://github.com/RecoLabs/microgen)
73- [GrantZheng/kit](https://github.com/GrantZheng/kit)
74- [kujtimiihoxha/kit](https://github.com/kujtimiihoxha/kit) (unmaintained)
75- [nytimes/marvin](https://github.com/nytimes/marvin)
76- [sagikazarmark/mga](https://github.com/sagikazarmark/mga)
77- [sagikazarmark/protoc-gen-go-kit](https://github.com/sagikazarmark/protoc-gen-go-kit)
78- [metaverse/truss](https://github.com/metaverse/truss)
79
80## Related projects
81
82Projects with a ★ have had particular influence on Go kit's design (or vice-versa).
83
84### Service frameworks
85
86- [gizmo](https://github.com/nytimes/gizmo), a microservice toolkit from The New York Times ★
87- [go-micro](https://github.com/micro/go-micro), a distributed systems development framework ★
88- [gotalk](https://github.com/rsms/gotalk), async peer communication protocol & library
89- [Kite](https://github.com/koding/kite), a micro-service framework
90- [gocircuit](https://github.com/gocircuit/circuit), dynamic cloud orchestration
91
92### Individual components
93
94- [afex/hystrix-go](https://github.com/afex/hystrix-go), client-side latency and fault tolerance library
95- [armon/go-metrics](https://github.com/armon/go-metrics), library for exporting performance and runtime metrics to external metrics systems
96- [codahale/lunk](https://github.com/codahale/lunk), structured logging in the style of Google's Dapper or Twitter's Zipkin
97- [eapache/go-resiliency](https://github.com/eapache/go-resiliency), resiliency patterns
98- [sasbury/logging](https://github.com/sasbury/logging), a tagged style of logging
99- [grpc/grpc-go](https://github.com/grpc/grpc-go), HTTP/2 based RPC
100- [inconshreveable/log15](https://github.com/inconshreveable/log15), simple, powerful logging for Go ★
101- [mailgun/vulcand](https://github.com/vulcand/vulcand), programmatic load balancer backed by etcd
102- [mattheath/phosphor](https://github.com/mondough/phosphor), distributed system tracing
103- [pivotal-golang/lager](https://github.com/pivotal-golang/lager), an opinionated logging library
104- [rubyist/circuitbreaker](https://github.com/rubyist/circuitbreaker), circuit breaker library
105- [sirupsen/logrus](https://github.com/sirupsen/logrus), structured, pluggable logging for Go ★
106- [sourcegraph/appdash](https://github.com/sourcegraph/appdash), application tracing system based on Google's Dapper
107- [spacemonkeygo/monitor](https://github.com/spacemonkeygo/monitor), data collection, monitoring, instrumentation, and Zipkin client library
108- [streadway/handy](https://github.com/streadway/handy), net/http handler filters
109- [vitess/rpcplus](https://godoc.org/github.com/youtube/vitess/go/rpcplus), package rpc + context.Context
110- [gdamore/mangos](https://github.com/gdamore/mangos), nanomsg implementation in pure Go
111
112### Web frameworks
113
114- [Gorilla](http://www.gorillatoolkit.org)
115- [Gin](https://gin-gonic.com/)
116- [Negroni](https://github.com/codegangsta/negroni)
117- [Goji](https://github.com/zenazn/goji)
118- [Martini](https://github.com/go-martini/martini)
119- [Beego](https://beego.vip/)
120- [Revel](https://revel.github.io/) (considered [harmful](https://github.com/go-kit/kit/issues/350))
121- [GoBuffalo](https://gobuffalo.io/)
122
123## Additional reading
124
125- [Architecting for the Cloud](https://slideshare.net/stonse/architecting-for-the-cloud-using-netflixoss-codemash-workshop-29852233) — Netflix
126- [Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html) — Google
127- [Your Server as a Function](http://monkey.org/~marius/funsrv.pdf) (PDF) — Twitter
View as plain text