└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Awesome Go for Lantern 2 | 3 | Cool libraries, frameworks, tips and tricks and anything that can be useful to share. 4 | 5 | Inspired by [awesome-go](https://github.com/avelino/awesome-go), for Lantern. 6 | 7 | 8 | 9 | ## General 10 | 11 | *General tools, hacks and techniques with wide usage* 12 | 13 | * [Preeny](https://github.com/zardus/preeny) - Make it easier to interact with services locally. It can disable fork(), rand(), and alarm() and can convert a server application to a console one. 14 | * [Ratelimit](https://github.com/bsm/ratelimit) - Simple, thread-safe Go rate-limiter. 15 | 16 | 17 | ## Networking 18 | 19 | * [Gopacket](https://github.com/google/gopacket) - Provides packet processing capabilities for Go. 20 | 21 | 22 | ## Network Analysis Tools 23 | 24 | *Tools for interference detection, probing and network analysis in general* 25 | 26 | * [Netalyzr](http://n1.netalyzr.icsi.berkeley.edu/analysis/) 27 | * [OONI](https://github.com/TheTorProject/ooni-probe) 28 | * [Zmap](https://zmap.io/) 29 | * [NDT](http://www.measurementlab.net/tools/ndt) 30 | 31 | 32 | ## Testing 33 | 34 | *Testing utilities and libraries* 35 | 36 | * [Go-fuzz](https://github.com/dvyukov/go-fuzz) - Randomized testing (fuzzing). Mainly applicable to packages that parse complex inputs (both text and binary). 37 | * [Stress](https://godoc.org/golang.org/x/tools/cmd/stress) - The stress utility is intended for catching of episodic failures. It runs a given process in parallel in a loop and collects any failures. 38 | 39 | 40 | ### Network-specific testing 41 | 42 | *Libraries for network testing.* 43 | 44 | * [Linkio](https://github.com/ian-kent/linkio) - Network link speed simulation for Reader/Writer interfaces. 45 | * [Toxiproxy](https://github.com/shopify/toxiproxy) - Proxy to simulate network and system conditions for automated tests. 46 | * [Comcast](https://github.com/tylertreat/Comcast) - Simulation of bad network connections. 47 | * [Gor](https://github.com/buger/gor) - HTTP traffic replay in real-time. Replay traffic from production to staging and dev environments. Test code on real user sessions in an automated and repeatable fashion. 48 | * [netem](http://www.linuxfoundation.org/collaborate/workgroups/networking/netem) - Network Emulation functionality for testing protocols by emulating the properties of wide area networks. The current version emulates variable delay, loss, duplication and re-ordering. 49 | 50 | 51 | ### HTTP Load testing 52 | 53 | *Tools to generate HTTP traffic* 54 | 55 | * [Boom](https://github.com/rakyll/boom) - Similiar to Apache Bench but much simpler! 56 | * [Vegeta](https://github.com/tsenart/vegeta) - More features! 57 | 58 | ## Code Checking 59 | 60 | *Tools for checking code style and related* 61 | 62 | * [Errcheck](https://github.com/kisielk/errcheck) - Checking for unchecked errors in go programs. 63 | * [Golint](https://github.com/golang/lint) - A linter for Go source code. 64 | * [GoMetaLinter](https://github.com/alecthomas/gometalinter) - Concurrently runs a whole bunch of linters. 65 | 66 | 67 | ## Code Analysis 68 | 69 | *Static code analysis tools that will help you gain insight of the codebase* 70 | 71 | * [Oracle](https://godoc.org/golang.org/x/tools/cmd/oracle) - The go oracle is a source analysis tool that answers questions about Go programs. 72 | 73 | 74 | ## Code Refactoring 75 | 76 | *Refactoring tools specific for Go* 77 | 78 | * [Gorename](https://godoc.org/golang.org/x/tools/cmd/gorename) - Precise type-safe renaming of identifiers in Go source code. 79 | * [Gomvpkg](https://godoc.org/golang.org/x/tools/cmd/gomvpkg) - Move go packages, updating import declarations. 80 | * [Goimports](https://godoc.org/golang.org/x/tools/cmd/goimports) - Update Go import lines, adding missing ones and removing unreferenced ones. 81 | * [Eg](https://godoc.org/golang.org/x/tools/refactor/) - Example-based refactoring tool (better instructions running it). 82 | 83 | 84 | ## Dynamic Analysis Tools 85 | 86 | *Tools to inspect and study the program behavior at runtime* 87 | 88 | * Race detection - ```go test -race``` 89 | * GC tracing - ```GODEBUG=gctrace=1 go run ``` 90 | * Scheduler tracing [(info)](http://www.goinggo.net/2015/02/scheduler-tracing-in-go.html) - ```GODEBUG=schedtrace=1000 go run ``` 91 | * Generic tracing [(info)](https://docs.google.com/document/u/1/d/1FP5apqzBgr7ahCCgFO-yoVhk4YZrNIDNf9RybngBc14/pub) - The capability is compiled into all programs always, and is enabled on demand -- when tracing is disabled it has minimal runtime overhead. That is, the trace can be obtained from a server in production serving live traffic. For visualization, use Google's [trace viewer](https://github.com/google/trace-viewer), or type the URL ```chrome://tracing``` for an embedded UI in Chrome. 92 | * [panicparse](https://github.com/maruel/panicparse) - Groups similar goroutines and colorizes stack dump. 93 | --------------------------------------------------------------------------------