package main
import (
"fmt"
"time"
)
func Runner() map[int]string {
results := make(map[int]string)
resultChan := make(chan *Result, worker)
defer close(resultChan)
// Membuat goroutine untuk setiap worker
for i := 1; i <= worker; i++ {
go func(id int) {
res, err := mockGetData(id)
if err != nil {
return
}
resultChan <- res
}(i)
}
// Mengumpulkan hasil dari channel dan simpan kedalam results
for i := 0; i < worker; i++ {
res := <-resultChan
results[res.ID] = res.Title
}
return results
}
type (
Result struct {
ID int `json:"id"`
Title string `json:"title"`
}
)
const worker = 3
var (
expectedWorker = 0
expected map[int]string = map[int]string{
1: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
2: "qui est esse",
3: "ea molestias quasi exercitationem repellat qui ipsa sit aut",
}
)
func main() {
results := Runner()
// Menampilkan hasil dari Runner
for id, title := range results {
fmt.Printf("ID: %d, Title: %s\n", id, title)
}
}
func mockGetData(id int) (*Result, error) {
expectedWorker++
time.Sleep(2 * time.Second)
result := Result{
ID: id,
Title: expected[id],
}
expected[id] = result.Title
return &result, nil
}