从log.Fatalln()上的文档:
func Fatalln(v …interface{}) Fatalln 等价于 Println() 然后调用 os.Exit(1)。
Fatalln的源代码:
310 // Fatalln is equivalent to Println() followed by a call to os.Exit(1). 311 func Fatalln(v ...interface{}) { 312 std.Output(2, fmt.Sprintln(v...)) 313 os.Exit(1) 314 }
似乎主要区别在于错误是否可恢复(因为您可以恢复恐慌) - 这些之间有什么更显着的不同吗?
Panic的接口定义是:
215 // The panic built-in function stops normal execution of the current 216 // goroutine. When a function F calls panic, normal execution of F stops 217 // immediately. Any functions whose execution was deferred by F are run in 218 // the usual way, and then F returns to its caller. To the caller G, the 219 // invocation of F then behaves like a call to panic, terminating G's 220 // execution and running any deferred functions. This continues until all 221 // functions in the executing goroutine have stopped, in reverse order. At 222 // that point, the program is terminated and the error condition is reported, 223 // including the value of the argument to panic. This termination sequence 224 // is called panicking and can be controlled by the built-in function 225 // recover. 226 func panic(v interface{})
看起来恐慌不会返回任何东西。
这是主要区别吗?否则,它们似乎在应用程序中执行相同的功能,假设没有恢复恐慌。
os.Exit
通常,仅panic用于编程错误,其中堆栈跟踪对错误的上下文很重要。如果消息不是针对程序员的,那么您只是将消息隐藏在多余的数据中。
panic