Code with Go
About
  • Code With Go! 🚀
  • Hello World
  • Values
  • Variables
  • Constants
  • For Loop
  • If Else
  • Switch
  • Array
  • Slice
  • Map
  • Range
  • Functions
  • Multiple Return Values
  • Variadic Functions
  • Closure
  • Recursion
  • Pointers
  • Strings and Runes
  • Structs
  • Methods
  • Interfaces
  • Struct Embedding
  • Generics
  • Error
  • Goroutines
  • Channels
  • Channel Buffering
  • Channel Synchronization
  • Channel Directions
  • Select
  • Timeouts
  • Non-Blocking Channel Operations
  • Closing Channels
  • Range over Channels
  • Timers
  • Tickers
  • Worker Pools
  • Wait Groups
  • Rate Limiting
  • Atomic Counters
  • Mutexes
  • Stateful Goroutines
  • Sorting
  • Sorting by Functions
  • Panic
  • Defer
  • Recover
  • String Functions
  • String Formatting
  • Text Templates
  • Regular Expressions
  • JSON
  • XML
  • Time
  • Epoch
  • Time Formatting / Parsing
  • Random Numbers
  • Number Parsing
  • SHA256 Hashes
  • Base64 Encoding
  • Reading Files
  • Writing Files
  • Line Filters
  • File Paths
  • Directories
  • Temporary Files and Directories
  • Embed Directive
  • Testing and Benchmarking
  • Command-Line Arguments
  • Command-Line Flags
  • Command-Line Subcommands
  • Environment Variables
  • Logging
  • HTTP Client
  • HTTP Server
  • Context
  • Spawning Processes
  • Exec'ing Processes
  • Signals
  • Exit
  • Resize Image
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub

Exit

In this code, the defer statement is used to schedule the execution of fmt.Println("!") to occur when the surrounding function (main in this case) is about to return. However, since os.Exit(3) is called immediately after the defer statement, the program exits before the deferred function is executed.

Here's what happens:

  1. defer fmt.Println("!"): Schedules the execution of fmt.Println("!") to occur when the surrounding function is about to return.

  2. os.Exit(3): Immediately terminates the program with an exit code of 3, and no further deferred functions are executed.

In general, using defer before os.Exit won't have the intended effect, as os.Exit does not allow deferred functions to run. If you want to execute some cleanup logic before exiting, it's recommended to place the cleanup code before the os.Exit call.

Here's an example illustrating the behavior:

package main

import (
	"fmt"
	"os"
)

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

	// The following line won't be executed due to os.Exit.
	os.Exit(3)
}

In this example, the deferred fmt.Println("!") statement will not be executed, and the program will exit immediately with an exit code/status of 3.

exit status 3
PreviousSignalsNextResize Image

Last updated 1 year ago

Was this helpful?