go语言如何实现并行请求

55次阅读
没有评论

共计 906 个字符,预计需要花费 3 分钟才能阅读完成。

Go 语言可以通过使用 goroutine 和 channel 来实现并行请求。以下是一个简单的示例:

package main

import ("fmt"
	"net/http"
	"time"
)

func main() {// 创建一个通道,用于接收请求结果
	results := make(chan string)

	// 定义一组 URL
	urls := []string{"https://www.google.com",
		"https://www.baidu.com",
		"https://www.github.com",
	}

	// 遍历 URL,为每个 URL 启动一个 goroutine 进行并行请求
	for _, url := range urls {go request(url, results)
	}

	// 等待所有请求完成,并收集结果
	for i := 0; i < len(urls); i++ {
		result := <-results
		fmt.Println(result)
	}
}

func request(url string, results chan<- string) {// 发送 HTTP GET 请求
	resp, err := http.Get(url)
	if err != nil {results <- fmt.Sprintf("Error requesting %s: %s", url, err)
		return
	}
	defer resp.Body.Close()

	// 模拟处理响应的延迟
	time.Sleep(time.Second)

	// 读取响应内容
	results <- fmt.Sprintf("Request to %s completed with status code %d", url, resp.StatusCode)
}

在上面的示例中,我们创建了一个通道 results 用于接收请求结果。然后,我们定义了一组 URL,并使用 go 关键字启动了一组 goroutine 来并行发送请求。每个 goroutine 执行 request 函数,该函数发送 HTTP GET 请求并将响应结果发送到通道 results 中。

最后,我们使用一个循环来等待所有请求完成,并从通道 results 中收集结果。这样,我们就可以并行发送多个请求,并在所有请求完成后处理结果。

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2024-03-21发表,共计906字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)