Go的Error、Log.Fatal和Defer
原创
©著作权归作者所有:来自51CTO博客作者Herio的原创作品,请联系作者获取转载授权,否则将追究法律责任
Go的Error、Log.Fatal和Defer
1.Error
1.errors.New 创建errow对象
2.fmt.Errorf 用字符串创建error对象。
3.自定义
2.Log.Fatal 和 Panic的区别
func fileSize(filename string) int64 {
f, err := os.Open(filename)
if err != nil {
return 0
}
// 延迟调用Close, 此时Close不会被调用
defer f.Close()
info, err := f.Stat()
if err != nil {
// defer机制触发, 调用Close关闭文件
return 0
}
size := info.Size()
// defer机制触发, 调用Close关闭文件
return size
}
代码中加粗部分为对比前面代码而修改的部分,代码说明如下:
- 第 10 行,在文件正常打开后,使用 defer,将 f.Close() 延迟调用,注意,不能将这一句代码放在第 4 行空行处,一旦文件打开错误,f 将为空,在延迟语句触发时,将触发宕机错误。
- 第 16 行和第 22 行,defer 后的语句(f.Close())将会在函数返回前被调用,自动释放资源。