Go-процедура это легкий поток, управляемый средой выполнения Go.
go f(x, y, z)
создает новую go-процедуру и запускает в ней
f(x, y, z)
f, x, y, и z определяются в текущей go-процедуре, а выполнение f происходит в новой go-процедуре.
Go-процедуры исполняются в том же адресном пространстве, поэтому доступ к общей памяти должен быть синхронизирован. Пакет sync предоставляет полезные примитивы, хотя они вам не понадобятся часто в Go, т.к. существуют другие.
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
Вывод:
world
hello
hello
world
world
hello
hello
world
world
hello
Еще один простой пример:
package main
import (
"fmt"
"time"
)
func main() {
go say("ho!", 2*time.Second)
go say("hey!", 1*time.Second)
// Делаем чтобы main уснул на 4 секунды
// чтобы go-процедуры могли завершиться
time.Sleep(4 * time.Second)
}
// say печатает текст после засыпания на Х секунд
func say(text string, secs time.Duration) {
time.Sleep(secs)
fmt.Println(text)
}
Вывод:
hey!
ho!
Читайте также:
- Основы языка Go: интерфейсы
- Основы языка Go: Stringers
- Основы языка Go: методы, получатели и указатели
Комментариев нет:
Отправить комментарий