Future / Promise
Future/Promise adalah pola pemrograman yang digunakan untuk menangani operasi asinkron dengan cara yang lebih terstruktur. Konsep ini mirip dengan async/await di JavaScript, di mana kita bisa menjalankan tugas secara non-blokir (non-blocking) dan mendapatkan hasilnya nanti setelah tugas selesai.
Perbedaan Future/Promise dengan Goroutine & Channel di Go
Di JavaScript, Promise atau async/await digunakan untuk menangani operasi asinkron dengan mudah. Sementara itu, di Go, tidak ada Promise secara langsung, tetapi konsep Future bisa diimplementasikan menggunakan goroutine dan channel.
Cara Kerja
then(), await
Channel atau sync.WaitGroup
Eksekusi
Non-blocking
Non-blocking
Error Handling
catch() / try...catch
select { case <- errChan }
Library Bawaan
Ya (Promise)
Tidak ada, harus dibuat manual
Implementasi Future di Go (Mirip dengan Promise di JavaScript)
Output:
✅ Tidak blocking, tetap bisa menjalankan kode lain.
Future dengan Error Handling (Mirip try...catch di Promise)
✅ Mirip try...catch di Promise, bisa menangani error dengan baik.
Kapan Menggunakan Future/Promise di Go?
🚀 Future sangat berguna untuk:
Memanggil API secara asinkron → Misalnya fetching data dari third-party API tanpa memblokir eksekusi lainnya.
Mengurangi Blocking dalam Goroutine → Memungkinkan eksekusi tetap berjalan tanpa menunggu satu tugas selesai duluan.
Meningkatkan Performa → Membantu menangani pekerjaan berat seperti query database atau proses perhitungan besar tanpa menghentikan alur program.
Kesimpulan
Future/Promise di Go bisa dibuat menggunakan goroutine + channel untuk menjalankan operasi asinkron.
Mirip dengan JavaScript async/await, tetapi tidak built-in, harus dibuat manual.
Future bisa menangani error dengan select { case result <- chan, case err <- chan }.
Sangat bermanfaat untuk pemanggilan API, query database, dan tugas berat lainnya tanpa memblokir eksekusi.
🚀 Jika terbiasa dengan async/await di JavaScript, Future di Go adalah cara terbaik untuk menulis kode asinkron yang lebih bersih dan efisien!
Last updated
Was this helpful?