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

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

解決 Go 中循環(huán)依賴的最佳實(shí)踐

解決 Go 中循環(huán)依賴的最佳實(shí)踐

Go
慕森卡 2023-06-12 15:51:50
我有一個(gè)包含這兩個(gè)包的 Go 項(xiàng)目:logging導(dǎo)入config,因?yàn)槲蚁雽?dāng)前配置發(fā)送到我的錯(cuò)誤報(bào)告系統(tǒng)config導(dǎo)入logging,因?yàn)槿绻绦驘o(wú)法打開(kāi)配置文件,我想記錄解決此依賴性錯(cuò)誤的最佳做法是什么?
查看完整描述

1 回答

?
慕妹3242003

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

您以什么格式將配置發(fā)送到錯(cuò)誤報(bào)告系統(tǒng)?也許將其傳遞給日志記錄?比如說(shuō),如果它是 json,那么在將其提供給日志記錄之前編組配置,然后[]byte只記錄結(jié)果。


但一般來(lái)說(shuō),如果兩個(gè)包直接相互依賴,您可以做的是讓其中一個(gè)包聲明一個(gè)與另一個(gè)包的行為相匹配的接口,然后讓一個(gè)單獨(dú)的包將具體實(shí)例作為接口傳遞。


例如:


/myapp/config


import "myapp/logging"


type Config struct {

     // ...

}


func NewConfig() *Config {

    // ...

    if err != nil {

        logging.LogError(err)

    }

}

/myapp/logging


import "myapp/config"


func LogConfig(c *config.Config) {

    // ...

}


func LogError(err error) {

    // ...

}

因此,在這種情況下,您可以在配置包中聲明一個(gè)接口,該接口與日志記錄所需的行為相匹配。


/myapp/config


type Logging interface {

    LogError(error)

}


var logging Logging


func SetLogging(l Logging) {

    logging = l

}


type Config struct {

     // ...

}


func NewConfig() *Config {

    // ...

    if err != nil {

        logging.LogError(err)

    }

}

然后讓日志包中的一個(gè)類(lèi)型通過(guò)簡(jiǎn)單地委托給原始函數(shù)來(lái)實(shí)現(xiàn)該接口。


/myapp/logging


import "myapp/config"


func LogConfig(c *config.Config) {

    // ...

}


func LogError(err error) {

    // ...

}


type Logging struct{}


func (Logging) LogError(err error) {

    LogError(err)

}

最后還有第三個(gè)包使它們一起工作。


/myapp


import "myapp/config"

import "myapp/logging"


func init() {

    config.SetLogging(logging.Logging{})

}


查看完整回答
反對(duì) 回復(fù) 2023-06-12
  • 1 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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