A goroutine is started with the go keyword. It begins with a small stack (a few KB) that grows on demand, so programs can run hundreds of thousands of them. The Go scheduler multiplexes goroutines onto a smaller number of OS threads.
go func() {
fmt.Println("runs concurrently")
}()
Goroutines do not return values directly; use a channel or shared state guarded by a mutex to communicate.