summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authordemo <demo@antix1>2026-05-26 16:42:42 -0400
committerdemo <demo@antix1>2026-05-26 16:42:42 -0400
commit6d27ef2c776f99d574fbafcd1c345f76b067dd49 (patch)
tree9e0e1d7e357fe88e7bc8646aee9246d0561af0b9 /main.go
parenta26c49208c571cc536e4be60db88bb12d8d5c213 (diff)
feat: change all channel payloads to pointer types
Diffstat (limited to 'main.go')
-rw-r--r--main.go30
1 files changed, 15 insertions, 15 deletions
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 {