A lightweight userspace Thread of execution
multiplex independently executing functions—coroutines—onto a set of threads. When a coroutine blocks, such as by calling a blocking system call, the run-time automatically moves other coroutines on the same operating system thread to a different, runnable thread so they won’t be blocked.
Goroutine Leaks
If a goroutine is started with a go context, but does not properly exit when that context is canceled, it can result in a goroutine leak.