[golang]正式项目中千万不要用 log.Fatal() 它和panic()函数的区别
golang的log.Fatal()和panic()函数的区别
一日,发现 golang 写的程序居然退出了! 心想,这怎么可能!都加了异常保护啊。结果发现有一个函数中有一个错误处理使用了 log.Fatalf 函数 ...
它能导致程序立即退出而不执行 defer 函数,更不要说什么异常保护了。心想这都什么 XX 代码,一个网络不通你就要停断我的程序,猪写的代码...
r, _, err := c.Exchange(m, net.JoinHostPort(dns_host, "53"))
if r == nil {
//log.Fatalf("*** error: %s\n", err.Error()); //!!! //clq 和 panic 不同,这个函数会立即退出,defer函数都不会被执行,所以正式函数中造成不要用!!!
fmt.Println("GetDnsPtr() *** error: %s\n", err.Error());
return result;
}
ps. 可参考 https://www.jianshu.com/p/f85ecae6e7df