登录
首页 >  Golang >  Go问答

GoColly 默认模式是同步还是异步的?

来源:stackoverflow

时间:2024-03-15 18:18:29 128浏览 收藏

GoColly 默认采用同步模式进行网络请求。尽管提供了一个 async 选项,但它会忽略实际参数,始终启用异步模式。在默认情况下,网络请求将按顺序执行,这意味着在没有使用 c.wait() 方法的情况下,程序不会立即退出。

问题内容

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()
}

正确答案


默认集合同步的。

令人困惑的部分可能是收集器选项 colly.Async(),它忽略了实际的参数。事实上,在撰写本文时的实现是:

func async(a ...bool) collectoroption {
    return func(c *collector) {
        c.async = true // uh-oh...!
    }
}

基于 this issue,这样做是为了向后兼容,这样(我相信)您可以传递一个没有参数的选项,它仍然可以工作,例如:

colly.NewCollector(colly.Async()) // no param, async collection

如果您完全删除异步选项并仅使用 colly.newcollector() 进行实例化,则网络请求将明显是顺序的 - 即您也可以删除 c.wait() 并且程序不会立即退出。

好了,本文到此结束,带大家了解了《GoColly 默认模式是同步还是异步的?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>