You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
833 B
Go
40 lines
833 B
Go
5 years ago
|
// A _goroutine_ is a lightweight thread of execution.
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func f(from string) {
|
||
|
for i := 0; i < 3; i++ {
|
||
|
fmt.Println(from, ":", i)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
// Suppose we have a function call `f(s)`. Here's how
|
||
|
// we'd call that in the usual way, running it
|
||
|
// synchronously.
|
||
|
f("direct")
|
||
|
|
||
|
// To invoke this function in a goroutine, use
|
||
|
// `go f(s)`. This new goroutine will execute
|
||
|
// concurrently with the calling one.
|
||
|
go f("goroutine")
|
||
|
|
||
|
// You can also start a goroutine for an anonymous
|
||
|
// function call.
|
||
|
go func(msg string) {
|
||
|
fmt.Println(msg)
|
||
|
}("going")
|
||
|
|
||
|
// Our two function calls are running asynchronously in
|
||
|
// separate goroutines now. Wait for them to finish
|
||
|
// (for a more robust approach, use a [WaitGroup](waitgroups)).
|
||
|
time.Sleep(time.Second)
|
||
|
fmt.Println("done")
|
||
|
}
|