1. 程式人生 > >Go語言-defer的使用

Go語言-defer的使用

return println 結果 nil 出現異常 ror () 使用 package

defer

不管程序是否出現異常,均在函數退出時候,自動執行相關代碼

實戰

實例1
package main

import (
    "fmt"
)

func main() {
    defer func() {
        fmt.Println("main defer")
    }()

    if err := test0(); err != nil {
        fmt.Println(err.Error())
        return
    }

    if err := test1(); err != nil {
        fmt.Println(err.Error())
        return
    }
}

func test0() error {
    return nil
}

func test1() error {
    return nil
}

運行結果

    main defer
實例2
package main

import (
    "fmt"
    "errors"
)

func main() {
    defer func() {
        fmt.Println("main defer")
    }()

    if err := test0(); err != nil {
        fmt.Println(err.Error())
        return
    }

    if err := test1(); err != nil {
        fmt.Println(err.Error())
        return
    }
}

func test0() error {
    return errors.New("test0 error") 
}

func test1() error {
    return nil
}

運行結果

test0 error
main defer
實例3
package main

import (
    "fmt"
    "errors"
)

func main() {
    defer func() {
        fmt.Println("main defer")
    }()

    if err := test0(); err != nil {
        fmt.Println(err.Error())
        return
    }

    if err := test1(); err != nil {
        fmt.Println(err.Error())
        return
    }
}

func test0() error {
    return nil
}

func test1() error {
    return errors.New("test1 error") 
}

運行結果

test1 error
main defer

實例4

package main

import (
    "fmt"
    "errors"
)

func main() {
    defer func() {
        fmt.Println("main defer0")
    }()

    defer func() {
        fmt.Println("main defer1")
    }()

    if err := test0(); err != nil {
        fmt.Println(err.Error())
        return
    }

    if err := test1(); err != nil {
        fmt.Println(err.Error())
        return
    }
}

func test0() error {
    defer func() {
        fmt.Println("test0 defer")
    }()
    return nil
}

func test1() error {
    defer func() {
        fmt.Println("test1 defer")
    }()
    return errors.New("test1 error") 
}

運行結果

test0 defer
test1 defer
test1 error
main defer1
main defer0

Go語言-defer的使用