Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 为什么这些函数相同的方法写得不同?_Go_Logging - Fatal编程技术网

Go 为什么这些函数相同的方法写得不同?

Go 为什么这些函数相同的方法写得不同?,go,logging,Go,Logging,} 这两个函数来自log4go库的源代码,我不知道为什么Warn(实际上所有级别都高于Warn)与Info不同,为什么Warn函数先运行msg,而Info将所有参数传递给iniLogf函数来处理日志?这是因为如果进程在该时间中止,可能会忽略关闭吗?最可能的解释是,由于Logger.Warn方法返回一个错误值,它经过重构,首先保存需要登录到变量msg中的值,然后单独记录并作为错误返回。 Logger.Info,同时,尽可能快地记录消息,因为不需要返回消息。 这似乎是这些函数工作方式的唯一区别。我认

}


这两个函数来自log4go库的源代码,我不知道为什么Warn(实际上所有级别都高于Warn)与Info不同,为什么Warn函数先运行msg,而Info将所有参数传递给iniLogf函数来处理日志?这是因为如果进程在该时间中止,可能会忽略关闭吗?

最可能的解释是,由于
Logger.Warn
方法返回一个
错误值,它经过重构,首先保存需要登录到变量
msg
中的值,然后单独记录并作为错误返回。
Logger.Info
,同时,尽可能快地记录消息,因为不需要返回消息。
这似乎是这些函数工作方式的唯一区别。

我认为这是第三方库代码的一个非常详细的部分。也许你应该问问图书馆的作者。是的。。。我犯了一个愚蠢的错误。。。我没有看到返回错误。New()。。。好的,无论如何,谢谢你。。
func (log Logger) Warn(arg0 interface{}, args ...interface{}) error {
const (
    lvl = WARNING
)
var msg string
switch first := arg0.(type) {
case string:
    // Use the string as a format string
    msg = fmt.Sprintf(first, args...)
case func() string:
    // Log the closure (no other arguments used)
    msg = first()
default:
    // Build a format string so that it will be similar to Sprint
    msg = fmt.Sprintf(fmt.Sprint(first)+strings.Repeat(" %v", len(args)), args...)
}
log.intLogf(lvl, msg)
return errors.New(msg)
}

func (log Logger) Info(arg0 interface{}, args ...interface{}) {
const (
    lvl = INFO
)
switch first := arg0.(type) {
case string:
    // Use the string as a format string
    log.intLogf(lvl, first, args...)
case func() string:
    // Log the closure (no other arguments used)
    log.intLogc(lvl, first)
default:
    // Build a format string so that it will be similar to Sprint
    log.intLogf(lvl, fmt.Sprint(arg0)+strings.Repeat(" %v", len(args)), args...)
}