Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

33 строки
725 B

  1. // Package strcase converts strings to snake_case or CamelCase
  2. package strcase
  3. import (
  4. "strings"
  5. )
  6. // Converts a string to snake_case
  7. func ToSnake(s string) string {
  8. s = addWordBoundariesToNumbers(s)
  9. s = strings.Trim(s, " ")
  10. n := ""
  11. for i, v := range s {
  12. // treat acronyms as words, eg for JSONData -> JSON is a whole word
  13. preIsCapital := false
  14. if i > 0 {
  15. w := s[i-1]
  16. preIsCapital = w >= 'A' && w <= 'Z'
  17. }
  18. if i > 0 && v >= 'A' && v <= 'Z' && n[len(n)-1] != '_' && !preIsCapital {
  19. // add underscore if next letter is a capital
  20. n += "_" + string(v)
  21. } else if v == ' ' {
  22. // replace spaces with underscores
  23. n += "_"
  24. } else {
  25. n = n + string(v)
  26. }
  27. }
  28. n = strings.ToLower(n)
  29. return n
  30. }