Skip to content
Go

defer Deferred Call

Usage and execution order of defer.

By EZ4Code Team
deferresource-release

Code

package main

import (
    "fmt"
    "os"
)

func main() {
    // LIFO order execution
    defer fmt.Println("1")
    defer fmt.Println("2")
    defer fmt.Println("3")
    // Output: 3, 2, 1

    // Resource release
    f, err := os.Open("file.txt")
    if err != nil {
        return
    }
    defer f.Close()

    // defer executes after return
    fmt.Println("main end")
}

// defer arguments evaluated immediately
func example() {
    i := 1
    defer fmt.Println(i) // 1
    i = 2
    fmt.Println(i)       // 2
}

Explanation

defer executes in LIFO order, commonly used for resource release.

More Go Snippets