在我目前的项目中,我试图编写一个日志函数,它将有条件地调用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
参数以某种方式进行了转换。我怎样才能将a
传递给fmt.Println,与直接调用fmt.Println的方式相同呢?
2条答案
按热度按时间9ceoxa921#
只需将
fmt.Println(a)
更改为fmt.Println(a...)
请参见“将参数传递给...参数”在go规范http://golang.org/ref/spec#Passing_arguments_to_..._parameters
nhjlsmyf2#
最初的问题不是如何 Package 一个函数,使它看起来像Printf,而是如何调用这样的函数。但是逐字逐句地考虑原始问题的主题,我来这里寻找创建和维护 Package 器的提示。
如果您想知道如何科普
go lint
提供的一些功能,您可以声明使用printf样式格式化程序的自制函数,以便它检查您的格式语句和参数是否匹配。比如说
像这样跑去兽医;
它会告诉您%d缺少一个参数。