40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
// _Горутины_ - это легковесный тред.
|
||
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"time"
|
||
)
|
||
|
||
func f(from string) {
|
||
for i := 0; i < 3; i++ {
|
||
fmt.Println(from, ":", i)
|
||
}
|
||
}
|
||
|
||
func main() {
|
||
|
||
// Предположим, у нас есть вызов функции `f(s)`. Вот
|
||
// как мы бы вызвали её обычным способом, запустив
|
||
// синхронно.
|
||
f("direct")
|
||
|
||
// Чтобы вызвать эту функцию в горутине, используйте
|
||
// `go f(s)`. Эта новая горутина будет выполняться
|
||
// одновременно с вызывающей фукнцией.
|
||
go f("goroutine")
|
||
|
||
// Вы так же можете вызывать анонимные функции в
|
||
// горутнах.
|
||
go func(msg string) {
|
||
fmt.Println(msg)
|
||
}("going")
|
||
|
||
// Наши две функции теперь выполняются асинхронно в
|
||
// отдельных горутинах. Дождитесь их окончания (для
|
||
// более надежного подхода используйте [WaitGroup](waitgroups)).
|
||
time.Sleep(time.Second)
|
||
fmt.Println("done")
|
||
}
|