import (
    "golang.org/x/time/rate"
    "io"
)

type rateLimitedReader struct {
	r       io.Reader
	limiter *rate.Limiter
}

func (rlr *rateLimitedReader) Read(p []byte) (int, error) {
	n, err := rlr.r.Read(p)
	if err != nil {
		return n, err
	}
	if n > 0 {
		// WaitN 阻塞直到 limiter 允许 n 个事件发生
		err = rlr.limiter.WaitN(context.Background(), n)
		if err != nil {
			return 0, err
		}
	}
	return n, nil
}


// 创建一个速度为 500 KB/s 的限制器
	limiter := rate.NewLimiter(rate.Limit(100*1024), int(100*1024)) // 每秒 500 KB

	doDownload := func() {
		// resp, err := http.DefaultClient.Do(req)
		resp, err := client.Do(req)
		if err != nil {
			log.Debugf("Failed when making HTTP request: %s", err)
		} else {
			defer resp.Body.Close()

			// 包装 resp.Body 以限制下载速度
			limitedReader := &rateLimitedReader{
				r:       resp.Body,
				limiter: limiter,
			}

			if _, err = io.Copy(io.Discard, io.TeeReader(limitedReader, counter)); err != nil {
				if !errors.Is(err, context.Canceled) && !errors.Is(err, context.DeadlineExceeded) {
					log.Debugf("Failed when reading HTTP response: %s", err)
				}
			}

			downloadDone <- struct{}{}
		}
	}