go - 如何使用 "...interface{}"参数包装函数(如 Printf)

标签 go

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

相关文章:

Golang 子目录

go - 在 Golang 和 Rust 上使用 Messagepack 编码时的输出不同

json - 为 json 对象声明一个结构

go - 我如何模拟接口(interface)内的特定嵌入式方法

linux - 如何为 GOPATH 使用 Samba 服务器位置?

google-app-engine -/_ah/start 在 AppEngine 上的 Go 中从未被调用

json - 您如何在Go中阅读嵌套的Json?

go - 如何优雅地检查三个值的相等性?

go - fork /执行。没有这样的文件或目录退出状态 1

json - 为什么我的 Go 服务器不能正确解码从客户端发送的 JSON?