第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

是否可以在 golang 中進(jìn)行簡單的依賴注入

是否可以在 golang 中進(jìn)行簡單的依賴注入

Go
一只名叫tom的貓 2023-02-06 19:31:02
我來自 node.js 和 nest.js 世界,DI 很簡單,由框架提供。在構(gòu)建服務(wù)時(shí),我可以或應(yīng)該考慮使用依賴注入嗎?
查看完整描述

3 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

是的,在 Go 中是可能的。


一個(gè)簡單的 Go 的三步 DI 系統(tǒng):


假設(shè)您有一個(gè)包 A,它不應(yīng)該導(dǎo)入包 B,而是調(diào)用該包中的一些函數(shù);例如,函數(shù) Load() 和 Save()。


在包 A 中,使用這些函數(shù)定義一個(gè)接口類型。

type Storage interface {

    Load(string) []byte

    Save(string, []byte)

}

然后,包 A 中的類型可以引用該接口并調(diào)用 Load() 和 Save(),而無需知道這些調(diào)用的實(shí)際接收者。


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 中,實(shí)現(xiàn) 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.StructB

a := A.NewStructA(storage)

a.Save()

現(xiàn)在您可以添加其他存儲提供(包 C、D、...)并將它們連接到main.


storage2 := C.StructC

a2 := A.NewStructA(storage2)

a2.Save()

此處有更詳細(xì)的討論:https ://appliedgo.net/di/


查看完整回答
反對 回復(fù) 2023-02-06
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊

一個(gè)基于依賴注入的 Go 應(yīng)用程序框架。 https://github.com/uber-go/fx

Go 的基于反射的依賴注入工具包。https://github.com/uber-go/dig


查看完整回答
反對 回復(fù) 2023-02-06
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

是的,你應(yīng)該在 go 中考慮 DI,DI 在 go 中具有與任何其他語言相同的優(yōu)勢。在go中使用接口可以輕松實(shí)現(xiàn)。



查看完整回答
反對 回復(fù) 2023-02-06
  • 3 回答
  • 0 關(guān)注
  • 143 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號