导入vendored包时键入错误

时间:2018-02-15 17:52:14

标签: go vendor

我目前正在尝试将多个服务中的所有共享组件导出到一个新软件包,然后将此软件包重新导入服务。

我很快遇到了以下问题: 在我的实用程序包中,我创建了一个函数:

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()

在我看来,这不是解决这个问题的完美解决方案,我想知道是否有更好的解决方法。

最诚挚的问候, 乔纳森

0 个答案:

没有答案