我有一个包含这两个包的Go项目:记录导入配置,因为我想将当前配置发送到我的错误报告系统配置进口伐木,因为我想……
您将配置发送到错误报告系统的格式是什么?也许把它传递给伐木?比方说,如果它是json,那么在给它进行记录之前编组配置,然后给出记录 []byte 只有结果。
[]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) { // ... }
因此,在这种情况下,您可以在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) } }
然后通过简单地委托给原始函数,在日志包中实现一个类型实现该接口。
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{}) }