case.go 853 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package rest
  2. import (
  3. "bytes"
  4. "strings"
  5. "unicode"
  6. )
  7. // CamelToSnake преобразует строку из CamelCase в snake_case.
  8. func CamelToSnake(s string) string {
  9. var result bytes.Buffer
  10. var lastIndex int = 0
  11. for i, char := range s {
  12. if i > 0 && unicode.IsUpper(char) && ((i+1 < len(s) && unicode.IsLower(rune(s[i+1]))) || unicode.IsLower(rune(s[i-1]))) {
  13. result.WriteString(strings.ToLower(s[lastIndex:i]))
  14. if lastIndex != i {
  15. result.WriteString("_")
  16. }
  17. lastIndex = i
  18. }
  19. }
  20. result.WriteString(strings.ToLower(s[lastIndex:]))
  21. return result.String()
  22. }
  23. // SnakeToCamel преобразует строку из snake_case в CamelCase.
  24. func SnakeToCamel(s string) string {
  25. var result string
  26. words := strings.Split(s, "_")
  27. for _, word := range words {
  28. w := strings.Title(word)
  29. result += w
  30. }
  31. return result
  32. }