A Go library implementing resiliency patterns like circuit breakers, semaphores, deadlines, batching, and retries.
go-resiliency is a Go library that implements common resiliency patterns for building fault-tolerant applications. It provides ready-to-use components like circuit breakers, semaphores, deadlines, batching, and retry mechanisms to handle failures gracefully in distributed systems. The library helps prevent cascading failures and improves application stability when dealing with unreliable dependencies.
Go developers building microservices, distributed systems, or any application that needs to handle failures gracefully when interacting with external services or resources.
Developers choose go-resiliency because it provides battle-tested resiliency patterns in a lightweight, Go-native implementation without heavy dependencies. It's inspired by proven solutions like Netflix's Hystrix and Shopify's Semian, making it a reliable choice for production systems.
Resiliency patterns for golang
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Inspired by established solutions like Hystrix and Semian, ensuring reliable implementations proven in production environments.
Provides a lightweight, native Go implementation without heavy external dependencies, making it easy to adopt in Go codebases.
Includes all common resiliency patterns—circuit breaker, semaphore, deadline, batching, and retriable—in a single library, reducing the need for multiple packages.
Shown by continuous integration badges and regular updates, indicating ongoing development and support for the library.
The maintainer admits to bumping minimum Go versions without major version changes, violating conventions and potentially causing issues for projects on older Go versions.
The README is concise and lacks detailed examples, tutorials, or best practices, which can increase the learning curve for complex implementations.
Lacks built-in metrics, logging, or monitoring features, requiring developers to add separate tooling for observability in production systems.