strings.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // ⚡️ Fiber is an Express inspired web framework written in Go with ☕️
  2. // 🤖 Github Repository: https://github.com/gofiber/fiber
  3. // 📌 API Documentation: https://docs.gofiber.io
  4. package utils
  5. import (
  6. "strings"
  7. )
  8. // ToLower converts ascii string to lower-case
  9. func ToLower(b string) string {
  10. res := make([]byte, len(b))
  11. copy(res, b)
  12. for i := 0; i < len(res); i++ {
  13. res[i] = toLowerTable[res[i]]
  14. }
  15. return UnsafeString(res)
  16. }
  17. // ToUpper converts ascii string to upper-case
  18. func ToUpper(b string) string {
  19. res := make([]byte, len(b))
  20. copy(res, b)
  21. for i := 0; i < len(res); i++ {
  22. res[i] = toUpperTable[res[i]]
  23. }
  24. return UnsafeString(res)
  25. }
  26. // TrimLeft is the equivalent of strings.TrimLeft
  27. func TrimLeft(s string, cutset byte) string {
  28. lenStr, start := len(s), 0
  29. for start < lenStr && s[start] == cutset {
  30. start++
  31. }
  32. return s[start:]
  33. }
  34. // Trim is the equivalent of strings.Trim
  35. func Trim(s string, cutset byte) string {
  36. i, j := 0, len(s)-1
  37. for ; i <= j; i++ {
  38. if s[i] != cutset {
  39. break
  40. }
  41. }
  42. for ; i < j; j-- {
  43. if s[j] != cutset {
  44. break
  45. }
  46. }
  47. return s[i : j+1]
  48. }
  49. // TrimRight is the equivalent of strings.TrimRight
  50. func TrimRight(s string, cutset byte) string {
  51. lenStr := len(s)
  52. for lenStr > 0 && s[lenStr-1] == cutset {
  53. lenStr--
  54. }
  55. return s[:lenStr]
  56. }
  57. // EqualFold tests ascii strings for equality case-insensitively
  58. func EqualFold(b, s string) bool {
  59. if len(b) != len(s) {
  60. return false
  61. }
  62. for i := len(b) - 1; i >= 0; i-- {
  63. if toUpperTable[b[i]] != toUpperTable[s[i]] {
  64. return false
  65. }
  66. }
  67. return true
  68. }
  69. // AddTrailingSlash appends a trailing '/' to v if it does not already end with one
  70. func AddTrailingSlash(s string) string {
  71. if strings.HasSuffix(s, "/") {
  72. return s
  73. }
  74. return s + "/"
  75. }