Golang:fmt,variadic args和%!(EXTRA type = value)错误

我正在实现标准日志包的包装器,以创建具有各种日志级别的记录器.

我有以下界面:

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 {} = []”.

最佳答案
我无法重现这种行为.你确定这不是一个简单的错误,你忘了在这里展示吗?

https://play.golang.org/p/-jtmll17Xj

package main

import "fmt"

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

func main() {
    Info("Hello %s", "World")
}

打印

Hello World

根据the fmt docs,%!(EXTRA string = WORLD)在您传递额外参数时添加到字符串中,格式是意外的.也许您使用格式字符串“Hello World”而不是“Hello%s”,或者传递参数两次?

转载注明原文:Golang:fmt,variadic args和%!(EXTRA type = value)错误 - 代码日志