go - 为什么 log.Printf() 不打印?

标签 go

<分区>

我正在学习 Go 并遇到了这种我不理解的行为。当我进行错误检查并使用 log.Printf() 时,我看到了操作系统错误,如果我在命令行上犯同样的错误,我通常会看到这种错误。

但是当我使用 log.Fatal() 时,最后一个 log.Printf() 不会打印到屏幕上。

package main

import (
    "log"
    "os/exec"
    "fmt"
)

func main() {
    cmd := exec.Command("ls", "-2")

    stdoutStderr, err := cmd.CombinedOutput()
    if err != nil {
        log.Printf("Error: %v", err)
        fmt.Println("Printing log fatal()")
        log.Fatal(err)
    }
    fmt.Printf("Output %s\n", stdoutStderr)

}

我期待看到这个输出:

# go run main.go 
2019/05/14 11:23:34 Error: exit status 2
Output ls: invalid option -- '2'
Try 'ls --help' for more information.
Printing log fatal()
2019/05/14 11:24:45 exit status 2
exit status 1

但我的实际结果是:

# go run main.go
2019/05/14 11:24:45 Error: exit status 2
Printing log fata()
2019/05/14 11:24:45 exit status 2
exit status 1

最佳答案

log.Fatal 在打印日志消息后调用 os.Exit()。因此 log.Fatal() 之后的语句将不会被调用。我相信这就是您在日志中看不到 fmt.Printf("Output %s\n", stdoutStderr) 输出的原因。

关于go - 为什么 log.Printf() 不打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56133992/

相关文章:

go - 将数据解码为任何结构

amazon-web-services - 带有限制的AWS dynamoDb分页

go - 通用函数中的Golang眼镜蛇命令标志未从cli获取值

multithreading - 在 go 中一次处理许多 GET 请求

go - GC 收集时释放 C 指针

go - 从 slice 中删除所有出现的相同元素

go - 打印Golang map 的键/值类型

go - 多行写长语句

Go 语言 ssh : Getting "Must specify HosKeyCallback" error despite setting it to nil

Golang 无法在同一个包中进行测试