Go dengan Contoh: Gorutin (Goroutines)

Gorutin (Goroutine) adalah sebuah thread eksekusi yang ringan.

package main
import (
    "fmt"
    "time"
)
func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}
func main() {

Misalkan kita punya sebuah pemanggilan fungsi f(s). Ini bagaimana kita memanggilnya dengan cara normal, menjalankan fungsi tersebut secara sinkronis.

    f("langsung")

Untuk menjalankan fungsi ini di sebuah gorutin, gunakan go f(s). Gorutin ini akan dieksekusi secara bersamaan dengan si pemanggil.

    go f("gorutin")

Kamu juga bisa memulai sebuah gorutin untuk pemanggilan fungsi anonim.

    go func(msg string) {
        fmt.Println(msg)
    }("anonim")

Dua buah pemanggilan fungsi kita berjalan secara bersamaan dalam gorutin yang terpisah. Tunggu sampai mereka selesai (untuk pendekatan yang lebih kuat, gunakan WaitGroup).

    time.Sleep(time.Second)
    fmt.Println("selesai")
}

Saat kita menjalankan program ini, pertama kita melihat keluaran dari pemanggilan fungsi blocking, lalu penyisipan keluaran dari dua gorutin. Penyisipan ini memperlihatkan gorutin-gorutin sedang dijalankan secara bersamaan oleh runtime Go.

$ go run goroutines.go
langsung : 0
langsung : 1
langsung : 2
gorutin : 0
anonim
gorutin : 1
gorutin : 2
selesai

Selanjutnya kita akan melihat pelengkap dari gorutin pada program konkuren Go: kanal (channel).

Contoh selanjutnya: Kanal (Channels).