1 回答

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{})
}
- 1 回答
- 0 關(guān)注
- 198 瀏覽
添加回答
舉報(bào)