我无法理解频道和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的请求。这也是我想要并发的原因。