在我当前的项目中,我正在尝试编写一个有条件地调用 fmt.Println 的日志记录函数。
我当前的 Log 函数如下所示:
func Log(level int, a ...interface{}) {
if level <= LogLevel {
fmt.Println(a)
}
}
但是当我这样调用它时,由于某种原因,Log 的输出被括在括号中:
http://play.golang.org/p/Aa8vC54Ih0
package main
import "fmt"
var LogLevel int
func main() {
fmt.Println("string", 10, 3.1415926)
LogLevel = 1
Log(1, "string", 10, 3.1415926)
}
func Log(level int, a ...interface{}) {
if level <= LogLevel {
fmt.Println(a)
}
}
string 10 3.1415926
[string 10 3.1415926]
这对我来说看起来像 Log 中的 a
参数以某种方式进行了转换。我将如何以与直接调用 fmt.Println 相同的方式将 a
传递给 fmt.Println?
最佳答案
只需将 fmt.Println(a)
改为 fmt.Println(a...)
参见 Go 规范 http://golang.org/ref/spec#Passing_arguments_to_..._parameters 中的“将参数传递给 ... 参数”
关于go - 如何使用 "...interface{}"参数包装函数(如 Printf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17860056/