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 关注
- 148 浏览
添加回答
举报