goctl config

概述

goctl config 是 用于对 goctl 静态配置文件做管理。 goctl config 的目录是根据工程项目来寻找的,以 goctl 可执行文件当前所在工作目录,寻找当前工作目录处在的 go module 或者 go path空间,然后在该空间下对 goctl.yaml 进行管理。 如果当前工作目录下没有 go module 则会自动根据工作目录名称创建 go.mod 文件。

goctl config 指令

  1. $ goctl config --help
  2. Usage:
  3. goctl config [command]
  4. Available Commands:
  5. clean Clean goctl config file
  6. init Initialize goctl config file
  7. Flags:
  8. -h, --help help for config
  9. Use "goctl config [command] --help" for more information about a command.

init

初始化 goctl 静态配置文件。

  1. $ goctl config init --help
  2. Initialize goctl config file
  3. Usage:
  4. goctl config init [flags]
  5. Flags:
  6. -h, --help help for init

clean

删除 goctl 配置文件。

  1. $ goctl config clean --help
  2. Clean goctl config file
  3. Usage:
  4. goctl config clean [flags]
  5. Flags:
  6. -h, --help help for clean

配置说明

goctl config 目前暂时仅支持对 model 数据类型映射的配置,其他配置将根据需要加入。

goctl config 初始化后会在项目工程中创建一个 goctl.yaml 文件,其内容如下:

  1. model:
  2. types_map:
  3. bigint:
  4. null_type: sql.NullInt64
  5. type: int64
  6. unsigned_type: uint64
  7. dec:
  8. null_type: sql.NullFloat64
  9. type: float64
  10. decimal:
  11. null_type: sql.NullFloat64
  12. type: float64
  13. double:
  14. null_type: sql.NullFloat64
  15. type: float64
  16. float:
  17. null_type: sql.NullFloat64
  18. type: float64
  19. float4:
  20. null_type: sql.NullFloat64
  21. type: float64
  22. float8:
  23. null_type: sql.NullFloat64
  24. type: float64
  25. int:
  26. null_type: sql.NullInt64
  27. type: int64
  28. unsigned_type: uint64
  29. int1:
  30. null_type: sql.NullInt64
  31. type: int64
  32. unsigned_type: uint64
  33. int2:
  34. null_type: sql.NullInt64
  35. type: int64
  36. unsigned_type: uint64
  37. int3:
  38. null_type: sql.NullInt64
  39. type: int64
  40. unsigned_type: uint64
  41. int4:
  42. null_type: sql.NullInt64
  43. type: int64
  44. unsigned_type: uint64
  45. int8:
  46. null_type: sql.NullInt64
  47. type: int64
  48. unsigned_type: uint64
  49. integer:
  50. null_type: sql.NullInt64
  51. type: int64
  52. unsigned_type: uint64
  53. mediumint:
  54. null_type: sql.NullInt64
  55. type: int64
  56. unsigned_type: uint64
  57. middleint:
  58. null_type: sql.NullInt64
  59. type: int64
  60. unsigned_type: uint64
  61. smallint:
  62. null_type: sql.NullInt64
  63. type: int64
  64. unsigned_type: uint64
  65. tinyint:
  66. null_type: sql.NullInt64
  67. type: int64
  68. unsigned_type: uint64
  69. date:
  70. null_type: sql.NullTime
  71. type: time.Time
  72. datetime:
  73. null_type: sql.NullTime
  74. type: time.Time
  75. timestamp:
  76. null_type: sql.NullTime
  77. type: time.Time
  78. time:
  79. null_type: sql.NullString
  80. type: string
  81. year:
  82. null_type: sql.NullInt64
  83. type: int64
  84. unsigned_type: uint64
  85. bit:
  86. null_type: sql.NullByte
  87. type: byte
  88. unsigned_type: byte
  89. bool:
  90. null_type: sql.NullBool
  91. type: bool
  92. boolean:
  93. null_type: sql.NullBool
  94. type: bool
  95. char:
  96. null_type: sql.NullString
  97. type: string
  98. varchar:
  99. null_type: sql.NullString
  100. type: string
  101. nvarchar:
  102. null_type: sql.NullString
  103. type: string
  104. nchar:
  105. null_type: sql.NullString
  106. type: string
  107. character:
  108. null_type: sql.NullString
  109. type: string
  110. longvarchar:
  111. null_type: sql.NullString
  112. type: string
  113. linestring:
  114. null_type: sql.NullString
  115. type: string
  116. multilinestring:
  117. null_type: sql.NullString
  118. type: string
  119. binary:
  120. null_type: sql.NullString
  121. type: string
  122. varbinary:
  123. null_type: sql.NullString
  124. type: string
  125. tinytext:
  126. null_type: sql.NullString
  127. type: string
  128. text:
  129. null_type: sql.NullString
  130. type: string
  131. mediumtext:
  132. null_type: sql.NullString
  133. type: string
  134. longtext:
  135. null_type: sql.NullString
  136. type: string
  137. enum:
  138. null_type: sql.NullString
  139. type: string
  140. set:
  141. null_type: sql.NullString
  142. type: string
  143. json:
  144. null_type: sql.NullString
  145. type: string
  146. blob:
  147. null_type: sql.NullString
  148. type: string
  149. longblob:
  150. null_type: sql.NullString
  151. type: string
  152. mediumblob:
  153. null_type: sql.NullString
  154. type: string
  155. tinyblob:
  156. null_type: sql.NullString
  157. type: string
goctl config - 图1 字段名称goctl config - 图2 说明
modelmodel 配置
model.types_mapmodel 配置之类型映射规则,是一个 map<string,obj> 结构,key 为数据库类型,value 为映射对象

model 的 golang 结构体

  1. // Model defines the configuration for the model code generation.
  2. Model struct {
  3. // 类型映射
  4. TypesMap map[string]ModelTypeMapOption `yaml:"types_map,omitempty" `
  5. }
  6. // ModelTypeMapOption custom Type Options.
  7. ModelTypeMapOption struct {
  8. // 数据库类型名称,不需要附加约束(如:长度等)如 bigint,varchar
  9. Type string `yaml:"type"`
  10. // 当数据类型为 unsigned 修饰时需要映射的 golang 映射类型
  11. UnsignedType string `yaml:"unsigned_type,omitempty"`
  12. // 当数据类型允许为 null且没有默认值时需要映射的 golang 映射类型,此优先级高于 unsigned 约束
  13. NullType string `yaml:"null_type,omitempty"`
  14. // 当被映射的 golang 类型为外部包时,需要指定包名。
  15. Pkg string `yaml:"pkg,omitempty"`
  16. }

数据库类型映射示例:将 decimal 映射为三方的 decimal.Decimal 包,其在 yaml 的表现为灰色底纹部分:

  1. model:
  2. types_map:
  3. bigint: # 当数据字段类型为 bigint 时,
  4. # 1. 如果允许 null 且没有默认值时 golang 类型映射为 sql.NullInt64
  5. # 2. 如果不允许 null 或者有默认值,则 golang 类型映射为 int64
  6. # 3. 如果不允许 null 或者有默认值,且为 unsigned 修饰,则 golang 类型映射为 uint64
  7. null_type: sql.NullInt64
  8. type: int64
  9. unsigned_type: uint64
  10. dec:
  11. null_type: sql.NullFloat64
  12. type: float64
  13. decimal:
  14. null_type: decimal.NullDecimal
  15. pkg: github.com/shopspring/decimal
  16. type: decimal.Decimal
  17. ...

使用示例

在不存在 go module 的目录下初始化配置

  1. $ ll
  2. total 0
  3. $ goctl config init
  4. goctl.yaml generated in ~/demo/goctl-config/goctl.yaml
  5. $ ls
  6. go.mod goctl.yaml
  7. $ cat go.mod
  8. module goctl-config
  9. go 1.20

在存在 go module 的目录下初始化配置

  1. $ ll
  2. total 8
  3. -rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod
  4. $ goctl config init
  5. goctl.yaml generated in ~/demo/goctl-config/goctl.yaml
  6. $ ll
  7. total 16
  8. -rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod
  9. -rw-r--r-- 1 *** staff 3.3K Apr 10 16:37 goctl.yaml

清除配置

  1. $ ll
  2. total 16
  3. -rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod
  4. -rw-r--r-- 1 *** staff 3.3K Apr 10 16:37 goctl.yaml
  5. $ goctl config clean
  6. $ ll
  7. total 8
  8. -rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod