Skip to main content

goctl config

##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

$ goctl config --help
Usage:
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.

init

Initialize the goctl static configuration file.

$ goctl config init --help
Initialize goctl config file

Usage:
goctl config init [flags]

Flags:
-h, --help help for init

clean

Delete the goctl configuration file.

$ goctl config clean --help
Clean goctl config file

Usage:
goctl config clean [flags]

Flags:
-h, --help help for clean

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
Field Description
modelModel code generation related configuration
model.types_mapThe 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

Initialize the configuration in a directory where there is no go module

$ ll
total 0
$ goctl config init
goctl.yaml generated in ~/demo/goctl-config/goctl.yaml
$ ls
go.mod goctl.yaml
$ cat go.mod
module goctl-config

go 1.20

Initialize the configuration in the directory where the go module exists

$ ll
total 8
-rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod
$ goctl config init
goctl.yaml generated in ~/demo/goctl-config/goctl.yaml
$ ll
total 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

clear configuration

$ ll
total 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
$ ll
total 8
-rw-r--r-- 1 *** staff 29B Apr 10 16:35 go.mod