0
所以我有点想知道最好的做法是在这里。Golang包和跨包使用变量
我有几个子包的应用程序,一些需要访问记录我在主包,因为我使用自定义记录器,带有颜色和时间戳等
通过注入实现该目标的唯一途径它是这样吗? (假设处理器处于一个子包称为命令)
type Handler struct {
logger logging.Logger
}
func NewHandler(logger logging.Logger) Handler {
return Handler{
logger: logger,
}
}
handler := command.NewHandler(logger)
这个问题我有这是测试变得讨厌,因为我有嘲笑的测试记录。 我想过这个问题应记录并让主包对付他们刚刚返回错误,但我想运行一些功能异步像这样
go handler.HandleMessage(msg)
所以IDK的如何处理异步函数或者错误它甚至有可能。
那么是否有最佳做法来做我想做的事?
谢谢!匿名函数是一个好主意。你能详细解释2吗?我无法通过零。什么是“具体类型”? – gempir
如果logging.Logger是一个接口,那么您需要将它的实现传递给NewHandler以便对其进行调用。另一方面,如果它是一个带有方法Log()的结构体,那么在(log * Logger)Log(msg string)函数中可以检查log == nil,如果是则返回。这意味着一个空的Logger(例如刚刚创建的Handler {})仍然有效 - 您不需要启动它。 –
啊,好吧,这是有道理的。在我的情况logging.Logger是从第三方库的接口,所以我将不得不围绕它写一个包装 – gempir