case.go 589 B

1234567891011121314151617181920212223242526
  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. }