In other languages their characteristics can be matched with corotuines. Coroutines are concurrent subroutines (methods, functions, or closures) that are nonpreemptive. Which means that they cannot be interrupted, instead they contain suspension and re-entry points in their execution flow.
How goroutines differ from coroutines are that they are preemptive, they can be suspended by the scheduler at any time, and resumed at any time. It’s up to scheduler to run goroutine.