From 6d27ef2c776f99d574fbafcd1c345f76b067dd49 Mon Sep 17 00:00:00 2001 From: demo Date: Tue, 26 May 2026 16:42:42 -0400 Subject: feat: change all channel payloads to pointer types --- main.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index bbd946a..6c5d77f 100644 --- a/main.go +++ b/main.go @@ -48,9 +48,9 @@ func main() { func pool(startURL url.URL, maxConcurrency, maxURLs int) { var wg sync.WaitGroup - urls := make(chan url.URL) + urls := make(chan *url.URL) - outlets := make([]<-chan []url.URL, maxConcurrency) + outlets := make([]<-chan *[]url.URL, maxConcurrency) for i := range maxConcurrency { outlets[i] = worker(&wg, i+1, urls) @@ -59,10 +59,10 @@ func pool(startURL url.URL, maxConcurrency, maxURLs int) { batches := fanIn(outlets...) dedup := deduplicate(batches) - urls <- startURL + urls <- &startURL for u := range dedup { - fmt.Printf("%s\n", &u) + fmt.Printf("%s\n", u) urls <- u } @@ -71,19 +71,19 @@ func pool(startURL url.URL, maxConcurrency, maxURLs int) { fmt.Println("done") } -func deduplicate(batches <-chan []url.URL) <-chan url.URL { - out := make(chan url.URL) +func deduplicate(batches <-chan *[]url.URL) <-chan *url.URL { + out := make(chan *url.URL) go func() { defer close(out) seen := make(map[url.URL]bool) for batch := range batches { - for _, u := range batch { + for _, u := range *batch { fmt.Println("(deduplicate) got url") if !seen[u] { seen[u] = true - out <- u + out <- &u fmt.Println("(deduplicate) finished url") } } @@ -93,8 +93,8 @@ func deduplicate(batches <-chan []url.URL) <-chan url.URL { return out } -func worker(wg *sync.WaitGroup, id int, urls <-chan url.URL) <-chan []url.URL { - out := make(chan []url.URL) +func worker(wg *sync.WaitGroup, id int, urls <-chan *url.URL) <-chan *[]url.URL { + out := make(chan *[]url.URL) wg.Go(func() { defer close(out) @@ -102,13 +102,13 @@ func worker(wg *sync.WaitGroup, id int, urls <-chan url.URL) <-chan []url.URL { for u := range urls { fmt.Printf("(%d) got url\n", id) - doc, err := fetch(u) + doc, err := fetch(*u) if err != nil { log.Print(err) } - batch := findURLs(u, doc) - out <- batch + batch := findURLs(*u, doc) + out <- &batch fmt.Printf("(%d) finished url\n", id) } }) @@ -116,8 +116,8 @@ func worker(wg *sync.WaitGroup, id int, urls <-chan url.URL) <-chan []url.URL { return out } -func fanIn(chans ...<-chan []url.URL) <-chan []url.URL { - out := make(chan []url.URL) +func fanIn(chans ...<-chan *[]url.URL) <-chan *[]url.URL { + out := make(chan *[]url.URL) var wg sync.WaitGroup for i, ch := range chans { -- cgit v1.2.3