与goroutines有关

时间:2017-06-06 13:28:37

标签: go goroutine

我无法理解频道和goroutines。我要做的是,继续“分页”,直到没有更多的结果(len(matches.Matches) == 0)。我的page值可以很好地运行到100000中,而不是打破无限循环。

func main() {
    results := make(chan []*shodan.HostData)
    var wg sync.WaitGroup


    shodanClient := authorizeShodanApi("redacted")

    page := 0
    for {
        wg.Add(1)
        go func() {
            matches, _ := shodanClient.GetHostsForQuery(&shodan.HostQueryOptions{
                Query: "country:AL port:8080 'HTTP/1.1 200 OK' 'http server 1.0'",
                Page: page,
            })
            defer wg.Done()
            if len(matches.Matches) == 0{
                fmt.Println("DONE")
                return
            }
            results <- matches.Matches
        }()
        page++
    }

    wg.Wait()
}

如果没有更多结果,我怎么能打破循环呢?

编辑: for{}的原因:Shodan每页返回100个结果,但我无法知道有多少页结果。这就是为什么我使用for{}循环,并且希望在没有更多值(意味着没有更多页面)时立即从循环中断开。 page以及以下代码:

matches, _ := shodanClient.GetHostsForQuery(&shodan.HostQueryOptions{
                Query: "country:AL port:8080 'HTTP/1.1 200 OK' 'http server 1.0'",
                Page: page,
            })

应该向特定页面发出对shodan API的请求。这也是我想要并发的原因。

0 个答案:

没有答案