13

在我当前的项目中,我正在尝试编写一个有条件地调用 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]

在我看来,这看起来像aLog 中的论点以某种方式发生了变化。我将如何以a与直接调用 fmt.Println 相同的方式传递给 fmt.Println?

4

1 回答 1

17

只需更改fmt.Println(a)fmt.Println(a...)

请参阅 go 规范http://golang.org/ref/spec#Passing_arguments_to_..._parameters中的“将参数传递给 ... 参数”

于 2013-07-25T14:05:27.407 回答