Go 中封装 log.Printf 方法时如何正确传递参数?

go 中封装 log.printf 方法时如何正确传递参数?

go 中封装 log.printf 方法

golang 中,封装日志相关的方法可以实现对日志输出的定制控制。然而,在封装 log.printf 方法时,可能会遇到一些问题。

例如,以下代码旨在根据给定条件控制日志输出:

package main

import "log"

func main() {
    debugf("我叫%s,今年%d", "jim", 18)
}

func debugf(str string, arg ...interface{}) {
    if true {
        log.printf(str+"
", arg)
    }
}

但是,这段代码无法按预期打印日志。实际输出如下:

2021/12/17 16:35:16 我叫[jim %!s(int=18)],今年%!d(missing)

这与我们期望的输出不同。问题在于 arg 在 log.printf 中的传递方式不正确。

要解决此问题,需要使用 ... 操作符将 arg 切片展开为函数调用中的单个参数。修改后的代码如下:

package main

import "log"

func main() {
    debugf("我叫%s,今年%d", "jim", 18)
}

func debugf(str string, arg ...interface{}) {
    if true {
        log.printf(str+"
", arg...)
    }
}

现在,这段代码将按预期输出日志:

我叫jim,今年18

以上就是Go 中封装 log.Printf 方法时如何正确传递参数?的详细内容,更多请关注其它相关文章!