random.go 819 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package loadmodule
  2. import (
  3. "errors"
  4. "math/rand"
  5. "net/url"
  6. "strings"
  7. )
  8. //负载-随机
  9. type RandomProxy struct {
  10. curIndex int
  11. rss []*url.URL
  12. }
  13. func (r *RandomProxy) Add(param string) error {
  14. urlParam := param
  15. if params := strings.Split(param, "|"); len(params) == 2 {
  16. urlParam = params[0]
  17. }
  18. if len(param) == 0 {
  19. return errors.New("param len 1 at least")
  20. }
  21. remoteUrl, err := url.Parse(strings.TrimSpace(urlParam))
  22. if err != nil {
  23. return err
  24. }
  25. r.rss = append(r.rss, remoteUrl)
  26. return nil
  27. }
  28. func (r *RandomProxy) Next() *url.URL {
  29. if len(r.rss) == 1 {
  30. return r.rss[0]
  31. }
  32. r.curIndex = rand.Intn(len(r.rss))
  33. return r.rss[r.curIndex]
  34. }
  35. func (r *RandomProxy) Get() *url.URL {
  36. return r.Next()
  37. }
  38. func (r *RandomProxy) Len() int {
  39. return len(r.rss)
  40. }
  41. func (r *RandomProxy) Update() {
  42. }