Future / Promise
Perbedaan Future/Promise dengan Goroutine & Channel di Go
Fitur
Promise (JS)
Future (Go - Custom)
Implementasi Future di Go (Mirip dengan Promise di JavaScript)
package main
import (
"fmt"
"time"
)
// Future struct untuk menyimpan hasil async task
type Future struct {
result chan string
}
// AsyncFunction menjalankan tugas secara asinkron dan mengembalikan Future
func AsyncFunction() *Future {
f := &Future{result: make(chan string, 1)}
go func() {
time.Sleep(2 * time.Second) // Simulasi operasi yang butuh waktu lama
f.result <- "Hasil dari Future!"
}()
return f
}
// Get akan mengambil hasil dari Future (mirip dengan await)
func (f *Future) Get() string {
return <-f.result
}
func main() {
fmt.Println("Mulai tugas...")
future := AsyncFunction() // Memulai tugas async tanpa blocking
// Kita bisa melakukan hal lain di sini sementara tugas async berjalan
fmt.Println("Melakukan tugas lain...")
// Ambil hasil dari Future (mirip await)
result := future.Get()
fmt.Println("Hasil Future:", result)
}Future dengan Error Handling (Mirip try...catch di Promise)
Kapan Menggunakan Future/Promise di Go?
Kesimpulan
Last updated