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:

  1. Membuat Wait Group: Untuk membuat sync.WaitGroup, Anda cukup membuat variabel baru dari tipe sync.WaitGroup dan kemudian menggunakan metode Add() untuk menambahkan jumlah goroutine yang perlu ditunggu.

    var wg sync.WaitGroup
  2. Menambahkan Goroutine ke Wait Group: Setiap kali Anda meluncurkan sebuah goroutine yang perlu ditunggu oleh WaitGroup, Anda harus menambahkan jumlahnya menggunakan metode Add().

    func myGoroutine() {
        defer wg.Done() // Menandakan bahwa goroutine sudah selesai
        // ... (kode goroutine)
    }
    
    // Menambahkan goroutine ke Wait Group
    wg.Add(1)
    go myGoroutine()
  3. Menunggu Goroutine Selesai: Setelah goroutine selesai, Anda harus memanggil metode Done() di dalam goroutine tersebut. WaitGroup akan menunggu hingga jumlah Done() yang dipanggil sama dengan jumlah Add() yang telah ditambahkan.

    goCopy codewg.Done() // Menandakan bahwa goroutine sudah selesai
  4. 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