url.go 711 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package util
  2. import (
  3. "net/url"
  4. "strings"
  5. )
  6. type UrlQueryReader struct {
  7. values url.Values
  8. }
  9. func NewUrlQueryReader(urlInfo *url.URL) (*UrlQueryReader, error) {
  10. u, err := url.ParseQuery(urlInfo.RawQuery)
  11. if err != nil {
  12. return nil, err
  13. }
  14. return &UrlQueryReader{
  15. values: u,
  16. }, nil
  17. }
  18. func (r *UrlQueryReader) Get(name string, def string) string {
  19. val := r.values[name]
  20. if len(val) == 0 {
  21. return def
  22. }
  23. return val[0]
  24. }
  25. func JoinUrlFragments(a, b string) string {
  26. aslash := strings.HasSuffix(a, "/")
  27. bslash := strings.HasPrefix(b, "/")
  28. if len(b) == 0 {
  29. return a
  30. }
  31. switch {
  32. case aslash && bslash:
  33. return a + b[1:]
  34. case !aslash && !bslash:
  35. return a + "/" + b
  36. }
  37. return a + b
  38. }