首頁 >常見問題 >go語言如何限制請求數

go語言如何限制請求數

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原創
2023-06-09 13:13:101233瀏覽

go語言限制請求數的方法是:1、建立一個Go範例檔;2、導入所需的包,設定最大同時請求數「concurrency」;3、透過sem通道限制最大並發數,阻塞其它請求,語法為“sem := make(chan struct{}, concurrency)”,直到空閒channel可用。

go語言如何限制請求數

本教學作業系統: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn