package workerpool import ( "fmt" ) func WorkerPool[T any](limit int, worker func(int, T)) chan<- T { tasks := make(chan T, limit) for i := 1; i <= limit; i++ { go func(i int) { defer fmt.Printf("worker:%d done\n", i) for t := range tasks { worker(i, t) } }(i) } return tasks }