fx
watermill
Our great sponsors
fx | watermill | |
---|---|---|
31 | 23 | |
5,175 | 6,729 | |
3.3% | 2.2% | |
8.2 | 6.5 | |
4 days ago | 3 days ago | |
Go | Go | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
fx
-
I write HTTP services in Go after 13 years (Mat Ryer, 2024)
I found fx(https://github.com/uber-go/fx) to be a super simple yet versatile tool to design my application around.
All the advice in the article is still helpful, but it takes the "how do I make sure X is initialized when Y needs it" part completely out of the equation and reduces it from an N*M problem to an N problem, ie I only have to worry about how to initialize individual pieces, not about how to synchronize initialization between them.
I've used quite a few dependency injection libraries in various languages over the years (and implemented a couple myself) and the simplicity and versatility of fx makes it my favorite so far.
-
go-ecommerce-microservices: A practical e-commerce microservices, built with cqrs, event sourcing, vertical slice architecture, event-driven architecture.
Some of the features: - ✅ Using Vertical Slice Architecture as a high level architecture - ✅ Using Event Driven Architecture on top of RabbitMQ Message Broker with a custom [Event Bus](pkg/messaging/bus/) - ✅ Using Event Sourcing in Audit Based services like [Orders Service](services/orders/) - ✅ Using CQRS Pattern and Mediator Patternon top of Go-MediatR library - ✅ Using Dependency Injection and Inversion of Controlon top of uber-go/fx library - ✅ Using RESTFul api with Echo framework and using swagger with swaggo/swag library - ✅ Using Postgres and EventStoreDB to write databases with fully supports transactions(ACID) - ✅ Using MongoDB and Elastic Search for read databases (NOSQL) - ✅ Using OpenTelemetry for collection Distributed Tracing with using Jaeger and Zipkin - ✅ Using OpenTelemetry for collection Metrics with using Prometheus and Grafana - ✅ Using Unit Test for testing small units with mocking dependent classes and using Mockery for mocking dependencies - ✅ Using End2End Test and Integration Test for testing features with all of their real dependeinces using docker containers (cleanup tests) and testcontainers-go library
-
Gorilla,wow
any take on https://github.com/uber-go/fx?
-
App init and graceful watch lib recommendations ?
I’m not sure of much that can do all of that - maybe it’s a use case for https://github.com/uber-go/fx
-
How normal is it to stare at your screen, getting nothing done when stuck and waiting for help?
If I still find myself stuck/waiting, I switch over to studying more about our team's main language Go. Currently looking around at Fx ( https://github.com/uber-go/fx ). Which is interesting, though I doubt we'll actually migrate anything for it, but might make a neat lunch and learn topic.
-
Zerolog printing logs multiple times
Hello gophers, I am using https://github.com/uber-go/fx and https://github.com/rs/zerolog for logging.
-
Does this project structure make sense?
Also, I like to use Uber FX for my DI stuff. You can check it out here:https://github.com/uber-go/fx
-
As a Go programmer, what design pattern, programming techniques have you actually used, implemented regularly in your workplace which made your life much easier?
I only have private and work repos... But I use Uber fx. https://github.com/uber-go/fx
-
Does Golang has any framework like Springboot?
Spring Boot is notable for its dependency injection / inversion of control. The closest Go has to this is Uber's Fx which also includes some lifecycle management.
-
Config for production and mocking (db connections, http parsers etc)
If you have such a complex and deep dependency graph, and you don't want to manually maintain it, you could use some DI library to handle that for you. Something like https://github.com/google/wire for small-medium size stuff, or https://github.com/uber-go/fx for larger scale, more enterprise projects.
watermill
-
Microservices communication
I’ve successfully worked on projects using an asynchronous event-driven way of connecting services. I really like the decoupling of business logic and the events triggering it. I highly recommend https://github.com/ThreeDotsLabs/watermill to be more flexible when it comes to choosing the actual technology driving the async patter. It might be NATS today but requirements might change and you need to change. Watermill prepares you for this.
-
Public chatroom websocket project in Go
Highly recommend https://watermill.io lib for building async apps (using among others pub/sub patterns). It greatly decouples your code from the underlying technology and gives you the freedom to choose depending on the environment (e.g dev, prod). For dev or small scale purposes, it supports pub/sub purely based on go channels.
-
How did you solve the problem of transactions between different databases and services?
Look at this library: https://github.com/ThreeDotsLabs/watermill
-
Examples of using task scheduler with Go?
Watermill is a good pubsub abstraction. You can start with native go channels and grow into a cloud pubsub or Kafka/Pulsar if you need to.
-
Small EDA/Micro service Project
These conditions have led me to discover two packages watermill.io and go-kit. Both of these seem to do what I want and I am thinking of implementing the project using watermill and go Chanels and deploying to a server or some sort.
-
Event Observer Pattern in Go
github.com/ThreeDotsLabs/watermill package provides a framework for building event-driven applications. It allows easy communication between independent components by decoupling the sender and the receiver.
-
I've just started learning Golang, and I'm struggling to choose a framework.
My personal favorite tools: - https://github.com/go-kit/ for building services (although it's not necessary a great tool for prototyping) - https://github.com/gorilla/mux router (although it's been recently deprecated, so I'm looking for a similar, maintained library) - https://entgo.io/ ORM - https://watermill.io/ for messaging
- How to handle events: an interactive example of consumer groups
- I’m looking for a suggestion for a queuing library
-
Looking for a mature distributed task queuer/scheduler in go
Checkout https://watermill.io/
What are some alternatives?
dig - A reflection based dependency injection toolkit for Go.
eventhorizon - Event Sourcing for Go!
wire - Compile-time Dependency Injection for Go
go-kit - A standard library for microservices.
wire - Strict Runtime Dependency Injection for Golang
Benthos - Fancy stream processing made operationally mundane
container - A lightweight yet powerful IoC dependency injection container for the Go programming language
pulse - ☁EventBus on Portable Pub/Sub Components☄
captcha - :sunglasses:Package captcha provides an easy to use, unopinionated API for captcha generation
wild-workouts-go-ddd-example - Go DDD example application. Complete project to show how to apply DDD, Clean Architecture, and CQRS by practical refactoring.
go-rabbitmq - A wrapper of streadway/amqp that provides reconnection logic and sane defaults