Golang Concurrency #4
📌 Studi Kasus: Proses Scraping Website Secara Paralel
Misalkan kita ingin melakukan web scraping ke beberapa URL sekaligus. Jika dilakukan secara berurutan (synchronous), maka akan sangat lambat karena harus menunggu setiap request selesai satu per satu.
Dengan goroutine, kita bisa menjalankan request secara paralel, sehingga proses scraping menjadi lebih cepat dan efisien.
📝 Implementasi Scraper dengan Goroutine dan WaitGroup
📝 Penjelasan Kode:
Membuat fungsi
fetchURL()- Fungsi ini mengambil URL, mengirim request, dan mengembalikan hasilnya ke channel.
- Menggunakan
defer wg.Done()untuk memastikan bahwa counterWaitGroupberkurang setelah goroutine selesai.
Menjalankan goroutine untuk setiap URL
- Looping daftar URL dan menjalankan
fetchURL(url)secara paralel dengango fetchURL(url, &wg, results). - Sebelum menjalankan goroutine, kita menambah counter
WaitGroupdenganwg.Add(1).
- Looping daftar URL dan menjalankan
Sinkronisasi dengan
WaitGroup- Setelah semua goroutine berjalan,
wg.Wait()digunakan untuk menunggu sampai semua goroutine selesai. - Kita menutup channel
resultssetelahwg.Wait()selesai agar loopfor result := range resultstahu kapan harus berhenti membaca.
- Setelah semua goroutine berjalan,
Channel
resultsuntuk komunikasi antar goroutine- Setiap hasil scraping dikirim ke channel agar bisa dibaca oleh goroutine utama.
⏳ Perbandingan Waktu Eksekusi
| Metode | Waktu Eksekusi |
|---|---|
| Tanpa Goroutine (Sequential) | ~5 detik (karena setiap request menunggu yang sebelumnya selesai) |
| Dengan Goroutine (Concurrent) | ~1-2 detik (karena request berjalan paralel) |
🚀 Keuntungan Pendekatan Ini
✅ Efisien dan Cepat – Request berjalan paralel, mempercepat proses scraping.
✅ Tidak Perlu time.Sleep() – Menggunakan WaitGroup untuk sinkronisasi secara benar.
✅ Aman dengan Channel – Menghindari kondisi race dengan mengirim hasil scraping ke channel.
🎯 Kesimpulan
Goroutine sangat efektif digunakan untuk kasus I/O-bound seperti web scraping, fetching data dari API, atau membaca banyak file secara bersamaan.
Jika ada pertanyaan atau ingin contoh lainnya, silakan tanya! 🚀