我正在围绕标准日志包实现包装器,以使记录器具有各种日志级别。

我有以下界面:

type Logger interface {
  Trace(fmt string, args ...interface{})
  Debug(fmt string, args ...interface{})
  Info(fmt string, args ...interface{})
  Warn(fmt string, args ...interface{})
  Error(fmt string, args ...interface{})
  Fatal(fmt string, args ...interface{})
  Panic(fmt string, args ...interface{})
}

在实现中,我有类似这样的内容(不是确切的代码)

func Info(format string, args ...interface{}){
  msg := fmt.Sprintf(format, args...)
  log.Println(msg)
}

现在,假设我这样调用我的库:

logger.Info("Hello %s", "World")

我得到打印输出:“ Hello%!(EXTRA string = WORLD)”,而不是预期的“ Hello World”。如果我有类似的输出

msg := fmt.Sprintf(format, args)

这将返回“ Hello World%!EXTRA [] interface {} = []”。