wire
Compile-time Dependency Injection for Go (by google)
dig
A reflection based dependency injection toolkit for Go. (by uber-go)
wire | dig | |
---|---|---|
30 | 6 | |
12,368 | 3,709 | |
1.6% | 1.4% | |
2.7 | 5.9 | |
2 months ago | 2 months ago | |
Go | Go | |
Apache License 2.0 | MIT License |
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
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.
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.
wire
Posts with mentions or reviews of wire.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2024-04-30.
-
Borgo is a statically typed language that compiles to Go
code generation is a mostly disjoint topic from DI. Granted, some solutions like https://github.com/google/wire use code generation, but you're exactly right about their pitfalls. If your dev environment doesn't have good support for generated code, it is a nightmare. If you can goto-definition the generated code, then it is suddenly feasible, but perhaps still a bad choice.
- Injeção de dependência em Go
-
Question about dependency initialization
We use https://github.com/google/wire for every bigger project, take a look at it, it beautifully solves initialisation and also gives you a guideline on how to do it.
-
As a Go programmer, what design pattern, programming techniques have you actually used, implemented regularly in your workplace which made your life much easier?
Im by no means a "purist" in such things, I love my magic and QoL-features/libs, but havent seen something that is so easy to use in go, that I immediately wanted to add it. And to be fair, I only looked closely at https://github.com/google/wire , others I have just skipped - and I will be looking into uber-fx as mentioned in the other comment.
-
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.
- Is it just me or does nobody really know what idiomatic Go is.
-
What's the best dependency injection framework / methodology for Golang for the enterprise?
Try https://github.com/google/wire. Compile time generated like dagger 2 in java.
-
Modern API design with Golang, PostgreSQL and Docker.
Most people probably do it by hand (I do). But otherwise, probably https://github.com/google/wire is the most popular, maybe followed by https://github.com/uber-go/fx.
-
Google's internal Go style guide
For larger object graphs do you roll everything by hand or encourage something like https://github.com/google/wire
-
godi a New Dependency Injection library - feedback welcome
The other thing is that I'm lazy, so I don't construct all dependencies in main.go manually but use wire to generate the construction of my dependency tree.
dig
Posts with mentions or reviews of dig.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2024-02-28.
- Injeção de dependência em Go
-
Go doesn’t do any magical stuff and I love that
Ironically given Spring’s history, you do have dependency injection in Go. But you don’t need to use it unless there’s a clear benefit. Most code reviewers would be appalled if you pulled in dig into a project that didn’t need it.
-
What's the best dependency injection framework / methodology for Golang for the enterprise?
Interesting, one of my friends works at a big tech company and they said they passed on Wire and ultimately decided on Uber Dig https://github.com/uber-go/dig. But looking at that lib it seems a bit anti-paradigm of the goal of the Golang language (no magic/obfuscated code running in the background, what you see is what you get style coding)
-
Is dependency injection in Go a thing?
It's a library to help with DI, by Uber: https://github.com/uber-go/dig
- Alternative for Monkey patching
What are some alternatives?
When comparing wire and dig you can also consider the following projects:
fx - A dependency injection based application framework for Go.
gomock - GoMock is a mocking framework for the Go programming language.
wire - Strict Runtime Dependency Injection for Golang
do - ⚙️ A dependency injection toolkit based on Go 1.18+ Generics.
di - 🛠 A full-featured dependency injection container for go programming language.
container - A lightweight yet powerful IoC dependency injection container for the Go programming language
goioc/di - Simple and yet powerful Dependency Injection for Go
gocontainer - Simple Dependency Injection Container
wild-workouts-go-ddd-example - Go DDD example application. Complete project to show how to apply DDD, Clean Architecture, and CQRS by practical refactoring.