1 回答

TA貢獻1824條經驗 獲得超6個贊
您以什么格式將配置發送到錯誤報告系統?也許將其傳遞給日志記錄?比如說,如果它是 json,那么在將其提供給日志記錄之前編組配置,然后[]byte只記錄結果。
但一般來說,如果兩個包直接相互依賴,您可以做的是讓其中一個包聲明一個與另一個包的行為相匹配的接口,然后讓一個單獨的包將具體實例作為接口傳遞。
例如:
/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) {
// ...
}
因此,在這種情況下,您可以在配置包中聲明一個接口,該接口與日志記錄所需的行為相匹配。
/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)
}
}
然后讓日志包中的一個類型通過簡單地委托給原始函數來實現該接口。
/myapp/logging
import "myapp/config"
func LogConfig(c *config.Config) {
// ...
}
func LogError(err error) {
// ...
}
type Logging struct{}
func (Logging) LogError(err error) {
LogError(err)
}
最后還有第三個包使它們一起工作。
/myapp
import "myapp/config"
import "myapp/logging"
func init() {
config.SetLogging(logging.Logging{})
}
- 1 回答
- 0 關注
- 193 瀏覽
添加回答
舉報