package
0.0.0-20250206045204-45fcc3025d35
Repository: https://github.com/romangurevitch/concurrencyworkshop.git
Documentation: pkg.go.dev

# README

Understanding Go's runtime Package: Goexit

The runtime package in Go provides the Goexit function, which terminates the current goroutine.

drawing

Table of Contents

  1. Introduction to Goexit
  2. Usage of Goexit
  3. Use Cases
  4. Common Pitfalls
  5. Best Practices
  6. Resources

Introduction to Goexit

Goexit terminates the goroutine that calls it.
No other goroutine is affected.
Goexit runs all deferred calls before terminating the goroutine.
Because Goexit is not a panic, any recover calls in those deferred functions will return nil.

Calling Goexit from the main goroutine terminates that goroutine without func main returning.
Since func main has not returned, the program continues execution of other goroutines.
If all other goroutines exit, the program crashes.

Usage of Goexit

package main

import (
	"fmt"
	"runtime"
)

func main() {
	go func() {
		defer fmt.Println("Deferred function in goroutine")
		fmt.Println("About to exit goroutine")
		runtime.Goexit()
		fmt.Println("This line will not be reached")
	}()
	
	runtime.Gosched()  // Give the goroutine a chance to run
}

Examples and tests

See package

Use Cases

  • Graceful Termination:
    • Gracefully terminating a goroutine when certain conditions are met.
  • Error Handling:
    • Terminating a goroutine in the event of an unrecoverable error.

Common Pitfalls

  • Running in main Goroutine:
    • Once runtime.Goexit() is called, it terminates the goroutine from which it's called, and if it's the main goroutine, it will crush the program.
      Unlike panics, runtime.Goexit() does not interact with recover(), and there's no mechanism to stop or reverse the termination of the goroutine.
  • Defers Still Run:
    • Despite the goroutine termination, deferred functions will still run.

Best Practices

  • Error Handling: Ensure proper error handling is in place, as runtime.Goexit will terminate the goroutine.

Resources