Categorygithub.com/samber/do
repository
2.0.0
Repository: https://github.com/samber/do.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

do - Dependency Injection

tag Go Version GoDoc Build Status Go report Coverage License

โš™๏ธ A dependency injection toolkit based on Go 1.18+ Generics.

This library implements the Dependency Injection design pattern. It may replace the fantastic uber/dig package. samber/do uses Go 1.18+ generics and therefore offers a typeโ€‘safe API.

image

See also:

  • samber/lo: A Lodash-style Go library based on Go 1.18+ Generics
  • samber/mo: Monads based on Go 1.18+ Generics (Option, Result, Either...)

Why this name?

I love the short name for such a utility library. This name is the sum of DI and Go and no Go package uses this name.

๐Ÿ’ก Features

  • ๐Ÿ“’ Service registration
    • Register by type
    • Register by name
    • Register multiple services from a package at once
  • ๐Ÿชƒ Service invocation
    • Eager loading
    • Lazy loading
    • Transient loading
    • Tag-based invocation
    • Circular dependency detection
  • ๐Ÿง™โ€โ™‚๏ธ Service aliasing
    • Implicit (provide struct, invoke interface)
    • Explicit (provide struct, bind interface, invoke interface)
  • ๐Ÿ” Service lifecycle
    • Health check
    • Graceful unload (shutdown)
    • Dependency-aware parallel shutdown
    • Lifecycle hooks
  • ๐Ÿ“ฆ Scope (a.k.a module) tree
    • Visibility control
    • Dependency grouping
  • ๐Ÿ“ค Container
    • Dependency graph resolution and visualization
    • Default container
    • Container cloning
    • Service override
  • ๐Ÿงช Debugging & introspection
    • Explain APIs: scope tree and service dependencies
    • Web UI & HTTP middleware (std, Gin, Fiber, Echo, Chi)
  • ๐ŸŒˆ Lightweight, no dependencies
  • ๐Ÿ”… No code generation
  • ๐Ÿ˜ท Typeโ€‘safe API

๐Ÿš€ Install

# v2 (latest)
go get github.com/samber/do@v2

# v1
go get github.com/samber/do

This library is v2 and follows SemVer strictly.

No breaking changes will be made to exported APIs before v3.0.0.

This library has no dependencies except the Go std lib.

๐Ÿ”ฅ Migration from v1 to v2

Documentation here

๐Ÿค  Documentation

๐Ÿค Contributing

Don't hesitate ;)

# Install some dev dependencies
make tools

# Run tests
make test
# or
make watch-test

๐Ÿ‘ค Contributors

Contributors

๐Ÿ’ซ Show your support

Give a โญ๏ธ if this project helped you!

GitHub Sponsors

๐Ÿ“ License

Copyright ยฉ 2022 Samuel Berthe.

This project is MIT licensed.