7
在我当前的项目中,我试图编写一个记录函数,它将有条件地调用fmt.Println。如何用“... interface {}”参数包装函数(如Printf)
我当前登录的功能如下:
func Log(level int, a ...interface{}) {
if level <= LogLevel {
fmt.Println(a)
}
}
但是,当我这样调用日志的输出括号内被包裹出于某种原因:
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?
谢谢。我真的应该坐下来仔细阅读整个规范。 – Splitlocked
只是为了澄清一下,当你做'fmt.Println(a)'时,你正在做什么,是在打印数组本身,所以'Println'格式化它以显示它是一个数组。当你执行'fmt.Println(a ...)'时,它将被扩展为'fmt.Println(a [0],a [1],a [2])'等等,其中'Println'被视为一系列值而不是数组。 – joshlf