goctl Configuration
##Overview
Goctl config is used to manage goctl static configuration files.
The directory of goctl config is found according to the project. In the working directory where the goctl executable is currently located, find the go module or go where the current working directory is located.
Path space, and then manage goctl.yaml under that space.
If there is no go module in the current working directory, a go.mod file is automatically created based on the working directory name.
goctl config command
Section titled “goctl config command”$ goctl config --helpUsage: goctl config [command]
Available Commands: clean Clean goctl config file init Initialize goctl config file
Flags: -h, --help help for config
Use "goctl config [command] --help" for more information about a command.Initialize the goctl static configuration file.
$ goctl config init --helpInitialize goctl config file
Usage: goctl config init [flags]
Flags: -h, --help help for initDelete the goctl configuration file.
$ goctl config clean --helpClean goctl config file
Usage: goctl config clean [flags]
Flags: -h, --help help for cleanconfiguration instructions
Section titled “configuration instructions”The goctl config currently only supports the configuration of the model data type mapping, and other configurations will be added as needed.
After goctl config is initialized, a goctl.yaml file will be created in the project, with the following contents:
model: types_map: bigint: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 dec: null_type: sql.NullFloat64 type: float64 decimal: null_type: sql.NullFloat64 type: float64 double: null_type: sql.NullFloat64 type: float64 float: null_type: sql.NullFloat64 type: float64 float4: null_type: sql.NullFloat64 type: float64 float8: null_type: sql.NullFloat64 type: float64 int: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 int1: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 int2: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 int3: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 int4: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 int8: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 integer: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 mediumint: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 middleint: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 smallint: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 tinyint: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 date: null_type: sql.NullTime type: time.Time datetime: null_type: sql.NullTime type: time.Time timestamp: null_type: sql.NullTime type: time.Time time: null_type: sql.NullString type: string year: null_type: sql.NullInt64 type: int64 unsigned_type: uint64 bit: null_type: sql.NullByte type: byte unsigned_type: byte bool: null_type: sql.NullBool type: bool boolean: null_type: sql.NullBool type: bool char: null_type: sql.NullString type: string varchar: null_type: sql.NullString type: string nvarchar: null_type: sql.NullString type: string nchar: null_type: sql.NullString type: string character: null_type: sql.NullString type: string longvarchar: null_type: sql.NullString type: string linestring: null_type: sql.NullString type: string multilinestring: null_type: sql.NullString type: string binary: null_type: sql.NullString type: string varbinary: null_type: sql.NullString type: string tinytext: null_type: sql.NullString type: string text: null_type: sql.NullString type: string mediumtext: null_type: sql.NullString type: string longtext: null_type: sql.NullString type: string enum: null_type: sql.NullString type: string set: null_type: sql.NullString type: string json: null_type: sql.NullString type: string blob: null_type: sql.NullString type: string longblob: null_type: sql.NullString type: string mediumblob: null_type: sql.NullString type: string tinyblob: null_type: sql.NullString type: string| model | Model code generation related configuration |
| model.types_map | The type mapping rule of the model configuration is a map <string, obj> structure, the key is the database type, and the value is the mapping object |
Model golang structure
// Model defines the configuration for the model code generation.Model struct { // type mapping TypesMap map[string]ModelTypeMapOption `yaml:"types_map,omitempty" `}
// ModelTypeMapOption custom Type Options.ModelTypeMapOption struct { // Database type name, no additional constraints (e.g. length, etc.) such as bigint, varchar Type string `yaml:"type"`
// The golang mapping type that needs to be mapped when the data type is unsigned UnsignedType string `yaml:"unsigned_type,omitempty"`
// The golang mapped type that needs to be mapped when the data type is allowed to be null and there is no default value, this takes precedence over the unsigned constraint NullType string `yaml:"null_type,omitempty"`
// When the mapped golang type is an external package, you need to specify the package name. Pkg string `yaml:"pkg,omitempty"`}Database type mapping example: Mapping decimal to a three-way decimal. Decimal package, which appears as a gray shading section in yaml:
model: types_map: bigint: # When the data field type is bigint, # 1. If null is allowed and there is no default value, the golang type maps to sql.NullInt64. # 2. If null is not allowed or there is a default value, the golang type maps to int64. # 3. If null is not allowed or has a default value and is unsigned, the golang type maps to uint64. null_type: sql.NullInt64 type: int64 unsigned_type: uint64 dec: null_type: sql.NullFloat64 type: float64 decimal: null_type: decimal.NullDecimal pkg: github.com/shopspring/decimal type: decimal.Decimal ...Example
Section titled “Example”Initialize the configuration in a directory where there is no go module
Section titled “Initialize the configuration in a directory where there is no go module”$ lltotal 0$ goctl config initgoctl.yaml generated in ~/demo/goctl-config/goctl.yaml$ lsgo.mod goctl.yaml$ cat go.modmodule goctl-config
go 1.20Initialize the configuration in the directory where the go module exists
Section titled “Initialize the configuration in the directory where the go module exists”$ lltotal 8-rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod$ goctl config initgoctl.yaml generated in ~/demo/goctl-config/goctl.yaml$ lltotal 16-rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod-rw-r--r-- 1 *** staff 3.3K Apr 10 16:37 goctl.yamlclear configuration
Section titled “clear configuration”$ lltotal 16-rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod-rw-r--r-- 1 *** staff 3.3K Apr 10 16:37 goctl.yaml$ goctl config clean$ lltotal 8-rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod