我目前正在尝试将多个服务中的所有共享组件导出到一个新软件包,然后将此软件包重新导入服务。
我很快遇到了以下问题: 在我的实用程序包中,我创建了一个函数:
package utils
import "github.com/rs/zerolog"
func CreateLogger(logLevel string, w io.Writer) Logger {
...
return zerolog.New(w).With().Timestamp().Logger()
}
所以现在这个包引用了"github.com/rs/zerolog"
现在在我的服务中我想使用这样的方法:
import "github.com/rs/zerolog"
var (
logger zerolog.Logger
)
func New() {
logger = utils.CreateLogger("info", os.Stdout)
}
现在这也引用了"github.com/rs/zerolog"
,但是引发了错误:
cannot use utils.CreateLogger("info", os.Stdout) (type "MY_REPO_PATH/vendor/VENDORED_REPO_PATH/vendor/github.com/rs/zerolog".Logger) as type "MY_REPO_PATH/vendor/github.com/rs/zerolog".Logger in assignment
所以我理解为什么会这样,我通过将我的utils中的zerologger包装到这样的结构中找到了一个解决方案:
type Logger struct {
Logger zerolog.Logger
}
现在这样可行,但不方便,因为我必须在我的代码中调用logger.Logger.Info()...
而不是logger.Info()
。
在我看来,这不是解决这个问题的完美解决方案,我想知道是否有更好的解决方法。
最诚挚的问候, 乔纳森