init.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package ams_ast
  2. import (
  3. "os"
  4. "path/filepath"
  5. "strings"
  6. "unicode"
  7. "unicode/utf8"
  8. )
  9. // 基础配置
  10. var (
  11. root, _ = filepath.Abs("./") // 项目根路径 -- 该路径仅用于开发阶段
  12. server_mod = "go_server" // go服务模型名
  13. server_enter = "enter.go" // go服务 入口文件名称
  14. server_router = "router" // 路由服务路径
  15. server_model = "model" // 模型模块根路径
  16. server_model_biz = "biz_modules" // 业务模块存放路径
  17. server_service = "service" // 实现层路径
  18. server_biz_base_service = "base" // 业务基础模块
  19. // server
  20. // 路由相关
  21. serverRootRouterPath = filepath.Join(root, server_router) // 跟路由文件夹路径
  22. serverRootRouterEnterFile = filepath.Join(serverRootRouterPath, server_enter) // 根路由入口文件地址 任务:往文件中注册子路由组
  23. // 模型相关
  24. modelTargetPath = filepath.Join(root, server_model) // 模型入口
  25. // template 模版使用相关规范
  26. // tips: 模板路径与服务配置路径保持一致 /根路径root/服务名/模块名/文件名
  27. // demo:
  28. // 子路由入口文件 model - 模型名称 命名规范 小写蛇形
  29. // 模板所在路径 ./resource/package/go_server/router/model/enter.go.tpl
  30. // 生成路径: root/go_server/router/model/enter.go
  31. //
  32. // 子路由
  33. // 模板所在路径: ./resource/package/go_server/router/model/enter.go.tpl
  34. // 文件生成路径: root/go_server/router/model/model.go
  35. template_root = filepath.Join(root, "/ams_ast/resource/package") // 模版存放根路径
  36. )
  37. // snakeString 驼峰转蛇形 XxYy to xx_yy , XxYY to xx_y_y
  38. func snakeString(s string) string {
  39. data := make([]byte, 0, len(s)*2)
  40. j := false
  41. num := len(s)
  42. for i := 0; i < num; i++ {
  43. d := s[i]
  44. // or通过ASCII码进行大小写的转化
  45. // 65-90(A-Z),97-122(a-z)
  46. //判断如果字母为大写的A-Z就在前面拼接一个_
  47. if i > 0 && d >= 'A' && d <= 'Z' && j {
  48. data = append(data, '_')
  49. }
  50. if d != '_' {
  51. j = true
  52. }
  53. data = append(data, d)
  54. }
  55. //ToLower把大写字母统一转小写
  56. return strings.ToLower(string(data[:]))
  57. }
  58. // 下划线转驼峰 xx_yy to xxYy
  59. func toCamelCase(s string) string {
  60. parts := strings.Split(s, "_")
  61. for i := range parts {
  62. if i > 0 {
  63. parts[i] = strings.Title(parts[i])
  64. }
  65. }
  66. return strings.Join(parts, "")
  67. }
  68. // 驼峰转下划线 XxYy to xx_yy , XxYY to xx_y_y
  69. func toSnakeCase(s string) string {
  70. var result []rune
  71. for i, r := range s {
  72. if i > 0 && unicode.IsUpper(r) {
  73. result = append(result, '_')
  74. }
  75. result = append(result, unicode.ToLower(r))
  76. }
  77. return string(result)
  78. }
  79. // 字符串首字母大写/小写
  80. func CapitalizeOrLower(str string, toLower ...bool) string {
  81. if str == "" {
  82. return str
  83. }
  84. r, size := utf8.DecodeRuneInString(str)
  85. if len(toLower) > 0 {
  86. return string(unicode.ToLower(r)) + str[size:]
  87. }
  88. return string(unicode.ToUpper(r)) + str[size:]
  89. }
  90. // 文件是否存在
  91. func FileExists(path string) bool {
  92. _, err := os.Lstat(path)
  93. return !os.IsNotExist(err)
  94. }