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.