GoColly 執行網路請求的默認模式是什么?由于我們Async在收集器中有方法,我假設默認模式是同步的。但是,當我在程式中執行這 8 個請求時,除了我需要Wait用于異步模式之外,我看不出有什么特別的區別。似乎該方法僅控制程式的執行方式(其他代碼)并且請求始終是異步的。
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
urls := []string{
"http://webcode.me",
"https://example.com",
"http://httpbin.org",
"https://www.perl.org",
"https://www.php.net",
"https://www.python.org",
"https://code.visualstudio.com",
"https://clojure.org",
}
c := colly.NewCollector(
colly.Async(true),
)
c.OnHTML("title", func(e *colly.HTMLElement) {
fmt.Println(e.Text)
})
for _, url := range urls {
c.Visit(url)
}
c.Wait()
}
uj5u.com熱心網友回復:
默認集合是同步的。
令人困惑的位可能是colly.Async()忽略實際引數的收集器選項。實際上在撰寫本文時的實作是:
func Async(a ...bool) CollectorOption {
return func(c *Collector) {
c.Async = true // uh-oh...!
}
}
基于這個問題,這樣做是為了向后兼容,所以(我相信)你可以傳遞一個沒有引數的選項,它仍然可以作業,例如:
colly.NewCollector(colly.Async()) // no param, async collection
如果您完全洗掉 async 選項并使用 just 實體化colly.NewCollector(),網路請求將明顯是順序的——即您也可以洗掉c.Wait()并且程式不會立即退出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/421107.html
標籤:
