Go的ErrorLog.Fatal和Defer

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go的ErrorLog.Fatal和Defer相关的知识,希望对你有一定的参考价值。

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

传送门1

传送门2

3.Defer延迟

传送门1

传送门2

4.参考文章

传送门1

传送门2

以上是关于Go的ErrorLog.Fatal和Defer的主要内容,如果未能解决你的问题,请参考以下文章

Go语言开发Go语言错误处理

Go语言defer(延迟执行语句)

golang中defer的正确使用方式(源自深入解析go)

go语言defer关键字背后的实现,语法,用法

go defer,panic,recover详解 go 的异常处理

go defer (go延迟函数)