是否可以在 golang 中进行简单的依赖注入

我来自 node.js 和 nest.js 世界,DI 很简单,由框架提供。在构建服务时,我可以或应该考虑使用依赖注入吗?



一只名叫tom的猫
浏览 110回答 3
3回答

温温酱

是的,在 Go 中是可能的。一个简单的 Go 的三步 DI 系统:假设您有一个包 A,它不应该导入包 B,而是调用该包中的一些函数;例如,函数 Load() 和 Save()。在包 A 中,使用这些函数定义一个接口类型。type Storage interface {    Load(string) []byte    Save(string, []byte)}然后,包 A 中的类型可以引用该接口并调用 Load() 和 Save(),而无需知道这些调用的实际接收者。type StructA struct {    content []byte    storage Storage}func NewStructA(s Storage) *StructA {    return &StructA{        content: ...,        storage: s,    }}func (a *StructA) Save(name string) {    a.storage.Save(name, a.content)}func (a *StructA) Load(name string) {    a.content = a.storage.Load(name)}在包 B 中,实现 Load() 和 Save()。type StoreB struct {    poem []byte}func (b *StoreB) Save(name string, contents []byte) {    // let's say StoreB contains a map called data    b.data[name] = contents}func (b *StoreB) Load(name string) []byte {    return b.data[name]}在包装main中,连接电线。storage := B.StructBa := A.NewStructA(storage)a.Save()现在您可以添加其他存储提供(包 C、D、...)并将它们连接到main.storage2 := C.StructCa2 := A.NewStructA(storage2)a2.Save()此处有更详细的讨论:https ://appliedgo.net/di/

哈士奇WWW

一个基于依赖注入的 Go 应用程序框架。 https://github.com/uber-go/fxGo 的基于反射的依赖注入工具包。https://github.com/uber-go/dig

阿波罗的战车

是的,你应该在 go 中考虑 DI,DI 在 go 中具有与任何其他语言相同的优势。在go中使用接口可以轻松实现。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go