首页 > 其他分享 >Go的Error、Log.Fatal和Defer

Go的Error、Log.Fatal和Defer

时间:2022-10-02 22:07:35浏览次数:48  
标签:Defer 调用 Log err defer Go Close Fatal


Go的Error、Log.Fatal和Defer

1.Error

Go的Error、Log.Fatal和Defer_golang


Go的Error、Log.Fatal和Defer_开发语言_02


Go的Error、Log.Fatal和Defer_后端_03

1.errors.New 创建errow对象

Go的Error、Log.Fatal和Defer_开发语言_04

2.fmt.Errorf 用字符串创建error对象。

Go的Error、Log.Fatal和Defer_后端_05

3.自定义

Go的Error、Log.Fatal和Defer_开发语言_06


2.Log.Fatal 和 Panic的区别

Go的Error、Log.Fatal和Defer_后端_07

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())将会在函数返回前被调用,自动释放资源。


标签:Defer,调用,Log,err,defer,Go,Close,Fatal
From: https://blog.51cto.com/u_15326986/5729468

相关文章