-
単純なスリープによるレート制限: この方法では、一定の時間間隔を空けることでレート制限を行います。以下は、リクエストごとに1秒のスリープを挿入する例です。
func makeRequest() { // リクエストを実行する処理 time.Sleep(time.Second) // 1秒のスリープ }
-
バケットアルゴリズムによるレート制限: バケットアルゴリズムは、指定された時間間隔内でのリクエスト数を制限する方法です。以下は、golang.org/x/time/rateパッケージを使用した例です。
import ( "golang.org/x/time/rate" ) func makeRequest() { // リクエストを実行する処理 limiter := rate.NewLimiter(rate.Limit(10), 1) // 1秒あたり最大10リクエスト if !limiter.Allow() { // レート制限に引っかかった場合の処理 return } }
-
IPアドレスごとのレート制限: 特定のIPアドレスごとに異なるレート制限を適用する場合、IPアドレスをキーとしたマップを使って管理する方法があります。以下は、sync.Mapを使用した例です。
import ( "sync" "time" ) var ( limiterMap sync.Map ) func makeRequest(ip string) { // リクエストを実行する処理 limiter, _ := limiterMap.LoadOrStore(ip, time.Tick(time.Second)) // 1秒ごとにリクエストを許可 <-limiter.(<-chan time.Time) }
これらはいくつかの一般的なGo言語におけるレート制限の実装方法です。必要に応じて、具体的な要件に合わせて適切な方法を選択してください。