我正在学习Go,并且遇到了我不了解的这种行为。当我执行错误检查并使用log.Printf()时,会看到os错误,通常我会在命令行上遇到相同的错误。
但是当我使用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
答案 0 :(得分:1)
log.Fatal
在打印日志消息后调用os.Exit()
。因此log.Fatal()
之后的语句将不会被调用。我相信这就是您在日志中看不到fmt.Printf("Output %s\n", stdoutStderr)
输出的原因。