go語言限制請求數的方法是:1、建立一個Go範例檔;2、導入所需的包,設定最大同時請求數「concurrency」;3、透過sem通道限制最大並發數,阻塞其它請求,語法為“sem := make(chan struct{}, concurrency)”,直到空閒channel可用。
本教學作業系統:Windows10系統、Go1.20.1版本、Dell G3電腦。
Go語言提供了一個稱為channel通道的資料型別。可以使用這個通道來控制請求的數量。
下面是一些範例程式碼, 使用一個帶有快取的channel,設定最大請求數量作為容量,並且每次發送請求時,進行阻塞,直到有空閒的channel容量再繼續請求:
package main import ( "fmt" "net/http" ) func main() { urls := []string{ "https://www.google.com", "https://www.facebook.com", "https://www.airbnb.com", "https://www.github.com", "https://www.twitter.com", "https://www.linkedin.com", "https://www.youtube.com", "https://www.microsoft.com", "https://www.reddit.com", "https://www.stackoverflow.com", } concurrency := 3 // 最大同时请求数量 sem := make(chan struct{}, concurrency) for _, url := range urls { sem <- struct{}{} go func(url string) { request(url) <-sem }(url) } for i := 0; i < concurrency; i++ { sem <- struct{}{} } } func request(url string) { res, err := http.Get(url) if err != nil { fmt.Printf("%s is down\n", url) return } defer res.Body.Close() fmt.Printf("%s -> status code: %d \n", url, res.StatusCode) }
在上面的範例中,我們啟動了10個HTTP請求,但同時只發生了3個請求,因為我們在sem通道中設定了最大並發數量。這樣,當我們達到並發限制時,所有其他的請求將被阻塞(sem <- struct {}{})直到空閒channel可用.
以上是go語言如何限制請求數的詳細內容。更多資訊請關注PHP中文網其他相關文章!