Решение на Concurrent Crawling от Йончо Йончев

Обратно към всички решения

Към профила на Йончо Йончев

Резултати

  • 0 точки от тестове
  • 0 бонус точки
  • 0 точки общо
  • 0 успешни тест(а)
  • 11 неуспешни тест(а)

Код

package main
import (
"io/ioutil"
"log"
"net/http"
)
func Worker(callback func(string) bool, str string) (string, error) {
//var wg sync.WaitGroup
resp, err := http.Get(str)
if err != nil {
log.Fatal(err)
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
return "", err
}
if res := callback(string(body)); res {
return str, nil
}
return "", nil
}
func SeekAndDestroy(callback func(string) bool, chunkedUrlsToCheck <-chan []string, workersCount int) (string, error) {
var result_ = ""
for i := 0; i < 2*workersCount; i += 1 {
var y = ""
go func(value string) {
var urls, _ = <-chunkedUrlsToCheck
for _, value := range urls {
if outcome, _ := Worker(callback, value); outcome == value {
result_ = string(outcome)
}
}
}(y)
}
return result_, nil
}

Лог от изпълнението

▸ Покажи лога

История (1 версия и 0 коментара)

Йончо обнови решението на 11.12.2014 16:31 (преди над 3 години)

▸ Покажи разликите
+package main
+
+import (
+ "io/ioutil"
+ "log"
+ "net/http"
+)
+
+func Worker(callback func(string) bool, str string) (string, error) {
+ //var wg sync.WaitGroup
+ resp, err := http.Get(str)
+ if err != nil {
+ log.Fatal(err)
+ return "", err
+ }
+ defer resp.Body.Close()
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ log.Fatal(err)
+ return "", err
+ }
+
+ if res := callback(string(body)); res {
+ return str, nil
+ }
+ return "", nil
+}
+
+func SeekAndDestroy(callback func(string) bool, chunkedUrlsToCheck <-chan []string, workersCount int) (string, error) {
+ var result_ = ""
+ for i := 0; i < 2*workersCount; i += 1 {
+ var y = ""
+
+ go func(value string) {
+ var urls, _ = <-chunkedUrlsToCheck
+ for _, value := range urls {
+ if outcome, _ := Worker(callback, value); outcome == value {
+ result_ = string(outcome)
+ }
+ }
+ }(y)
+ }
+ return result_, nil
+}