Горутины - это легковесный тред. |
|
package main
|
|
import (
"fmt"
"time"
)
|
|
func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
|
|
func main() {
|
|
Предположим, у нас есть вызов функции |
f("direct")
|
Чтобы вызвать эту функцию в горутине, используйте
|
go f("goroutine")
|
Вы так же можете вызывать анонимные функции в горутнах. |
go func(msg string) {
fmt.Println(msg)
}("going")
|
Наши две функции теперь выполняются асинхронно в отдельных горутинах. Дождитесь их окончания (для более надежного подхода используйте WaitGroup). |
time.Sleep(time.Second)
fmt.Println("done")
}
|
Когда мы запускаем эту программу, мы видим сначала вывод блокирующего вызова, а затем чередующийся вывод двух горутин. Это чередование отражает выполнение горутин, одновременно выполняемых средой выполнения Go. |
$ go run goroutines.go
direct : 0
direct : 1
direct : 2
goroutine : 0
going
goroutine : 1
goroutine : 2
done
|
Далее мы рассмотрим дополнение к горутинам в параллельных программах Go: каналы. |
Следующий пример: Каналы (Channels).