string.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package utils
  2. import (
  3. "fmt"
  4. "reflect"
  5. "strconv"
  6. "strings"
  7. )
  8. // FirstUpper 字符串首字母大写
  9. func FirstUpper(s string) string {
  10. if s == "" {
  11. return ""
  12. }
  13. return strings.ToUpper(s[:1]) + s[1:]
  14. }
  15. // FirstLower 字符串首字母小写
  16. func FirstLower(s string) string {
  17. if s == "" {
  18. return ""
  19. }
  20. return strings.ToLower(s[:1]) + s[1:]
  21. }
  22. // HasPrefix 判断字符串是否以指定前缀开头
  23. func HasPrefix(s *string, prefix string) bool {
  24. pl := len(prefix)
  25. return len(*s) >= pl && (*s)[:pl] == prefix
  26. }
  27. // IsPrefix 检查字符串 s 是否以 prefix 开头,并返回一个新的字符串,
  28. // 如果 s 不以 prefix 开头,则在 s 前面添加 prefix。
  29. func IsPrefix(s, prefix string) string {
  30. if s == "" || prefix == "" {
  31. return s + prefix
  32. }
  33. if HasPrefix(&s, prefix) {
  34. return s
  35. }
  36. return prefix + s
  37. }
  38. // HasSuffix 判断字符串是否以指定后缀结尾
  39. func HasSuffix(s *string, suffix string) bool {
  40. if s == nil {
  41. return false
  42. }
  43. return len(*s) >= len(suffix) && (*s)[len(*s)-len(suffix):] == suffix
  44. }
  45. // IsSuffix 检查字符串 s 是否以 suffix 结尾,并返回一个新的字符串,
  46. // 如果 s 不以 suffix 结尾,则在 s 后面添加 suffix。
  47. func IsSuffix(s, suffix string) string {
  48. if s == "" || suffix == "" {
  49. return s + suffix
  50. }
  51. if HasSuffix(&s, suffix) {
  52. return s
  53. }
  54. return s + suffix
  55. }
  56. func ToString(i interface{}) (string, error) {
  57. value := reflect.ValueOf(i)
  58. switch value.Kind() {
  59. case reflect.String:
  60. return value.String(), nil
  61. case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  62. return strconv.FormatInt(value.Int(), 10), nil
  63. case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
  64. return strconv.FormatUint(value.Uint(), 10), nil
  65. case reflect.Float32, reflect.Float64:
  66. return strconv.FormatFloat(value.Float(), 'g', -1, 64), nil
  67. case reflect.Bool:
  68. return strconv.FormatBool(value.Bool()), nil
  69. default:
  70. return "", fmt.Errorf("无法将 %s 类型转换为 string", value.Type())
  71. }
  72. }