package main

import (
	"fmt"
	"runtime"
	"sync"
	"time"
)

func main() {
	pesan := make(chan string) // tidak ada pengirim pada contoh ini
	done := make(chan struct{})
	var wg sync.WaitGroup

	fmt.Println("goroutine awal  :", runtime.NumGoroutine())

	for range 3 {
		wg.Add(1)
		go func() {
			defer wg.Done()
			select {
			case p := <-pesan:
				fmt.Println("menerima pesan:", p)
			case <-done:
				// sinyal berhenti: goroutine keluar dengan rapi
			}
		}()
	}

	close(done)
	wg.Wait()
	time.Sleep(20 * time.Millisecond) // beri runtime waktu memusnahkan goroutine

	fmt.Println("goroutine akhir :", runtime.NumGoroutine())
}
