英文:
What would be the right way to do async post and get requests?
问题
go的HTTP包的官方文档中提到:
> 要使用自定义标头进行请求,请使用Client.NewRequest和Client.Do
然而,如果一个POST请求需要一段时间才能完成(异步),'Client.NewRequest'和'Client.Do'会等待响应吗?
在具有自定义标头的情况下,应该如何正确地进行异步POST和GET请求?
英文:
The official docs of go's HTTP package say that
> To make a request with custom headers, use Client.NewRequest and Client.Do
However, if a post request takes time to complete (async), does 'Client.NewRequest' and 'Client.Do' await for the response?
What would be the right way to do async post and get requests while having custom headers?
答案1
得分: 1
你可以使用通道(channel)和 goroutine 来实现。
伪代码如下:
func sendRequest(resp chan *Client.Response, method, url string) {
client := &http.Client{
CheckRedirect: redirectPolicyFunc,
}
req, err := http.NewRequest(method, url, nil)
response, err := client.Do(req)
if err != nil {
// 错误处理
}
resp <- response
}
func getResponse(resp chan *Client.Response) {
response := <-resp
}
canal := make(chan *Client.Response)
go sendRequest(canal, "GET", "http://google.com")
go getResponse(canal)
以上代码使用了一个名为 canal
的通道(channel),并通过 sendRequest
函数发送 HTTP 请求,并将响应放入通道中。然后,通过 getResponse
函数从通道中接收响应。通过使用 goroutine,可以并发地执行这两个函数。
英文:
you can use channel and goroutine
in pseudo code:
func sendRequest(resp chan *Client.Response, method, url string) {
client := &http.Client{
CheckRedirect: redirectPolicyFunc,
}
req, err := http.NewRequest(method, url, nil)
response, err := client.Do(req)
if err != nil {
}
resp <- response
}
func getResponse(resp chan *Client.Response) {
response := <- resp
}
canal := make(chan *Client.Response)
go sendRequest(canal, "GET", "http://google.com")
go getResponse(canal)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论