Cara membuat WaitGroup di Golang
Di Go, sync.WaitGroup
digunakan untuk menunggu sekelompok goroutine selesai sebelum melanjutkan eksekusi program. Ini sangat berguna ketika Anda ingin menunggu beberapa goroutine selesai sebelum menjalankan tindakan selanjutnya di program Anda.
Berikut adalah cara membuat dan menggunakan sync.WaitGroup
:
Membuat Wait Group: Untuk membuat
sync.WaitGroup
, Anda cukup membuat variabel baru dari tipesync.WaitGroup
dan kemudian menggunakan metodeAdd()
untuk menambahkan jumlah goroutine yang perlu ditunggu.var wg sync.WaitGroup
Menambahkan Goroutine ke Wait Group: Setiap kali Anda meluncurkan sebuah goroutine yang perlu ditunggu oleh
WaitGroup
, Anda harus menambahkan jumlahnya menggunakan metodeAdd()
.func myGoroutine() { defer wg.Done() // Menandakan bahwa goroutine sudah selesai // ... (kode goroutine) } // Menambahkan goroutine ke Wait Group wg.Add(1) go myGoroutine()
Menunggu Goroutine Selesai: Setelah goroutine selesai, Anda harus memanggil metode
Done()
di dalam goroutine tersebut.WaitGroup
akan menunggu hingga jumlahDone()
yang dipanggil sama dengan jumlahAdd()
yang telah ditambahkan.goCopy codewg.Done() // Menandakan bahwa goroutine sudah selesai
Menunggu Semua Goroutine Selesai: Setelah semua goroutine ditambahkan dan menjalankan
Wait()
, program akan berhenti dan menunggu sampai semua goroutine selesai.goCopy codewg.Wait() // Menunggu semua goroutine selesai
Berikut adalah contoh lengkap penggunaan sync.WaitGroup
:
package main
import (
"fmt"
"sync"
"time"
)
func myGoroutine(id int, wg *sync.WaitGroup) {
defer wg.Done() // Menandakan bahwa goroutine sudah selesai
time.Sleep(time.Second) // Contoh pekerjaan yang membutuhkan waktu satu detik
fmt.Println("Goroutine", id, "selesai")
}
func main() {
var wg sync.WaitGroup
// Menambahkan 3 goroutine ke Wait Group
for i := 1; i <= 3; i++ {
wg.Add(1)
go myGoroutine(i, &wg)
}
// Menunggu semua goroutine selesai
wg.Wait()
fmt.Println("Semua goroutine selesai. Lanjutkan eksekusi program.")
}
Pada contoh di atas, kita membuat tiga goroutine yang membutuhkan waktu satu detik untuk menyelesaikan tugasnya. sync.WaitGroup
digunakan untuk menunggu ketiga goroutine selesai sebelum mencetak pesan "Semua goroutine selesai. Lanjutkan eksekusi program.". WaitGroup
memastikan bahwa program menunggu hingga semua goroutine selesai sebelum melanjutkan eksekusi program utama.
Di bab berikutnya akan dibahas tentang bagaimana membuat Select statement di Golang
Last updated