zcmodel

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 16, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Generate

func Generate(input Input) error

Generate 根据表信息和列定义生成 Entity 结构体、DO 结构体及两者的互转方法(ToDO/ToEntity), 并将生成代码写入 OutputDir 下的 Go 文件。 处理流程:

  1. 校验数据库方言、表名(防路径穿越)和 JSON tag 命名风格;
  2. 复制列信息,为副本中未显式指定的字段补充字段名(toPascalCase)、字段类型(formatStructFieldType) 和 JSON tag 值(formatJSONTag),不改动调用方传入的数据;
  3. 检测转换后字段名为空/非法标识符/重复的列并报错,避免产出无法编译的代码;
  4. 生成 Entity(值类型字段)和 DO(any 类型字段)结构体及互转方法;
  5. 将生成代码写入 {OutputDir}/{TableName}.go,已存在的文件通过 AST 解析保留用户自定义代码, 落盘前对完整内容做 go/parser 自校验,非法产物直接报错不写文件。

Types

type Column

type Column struct {
	// 列名
	Name string
	// 列类型(如 "VARCHAR(255)"、"bigint(20)"、"text")
	Type string
	// 列注释,会生成到结构体字段的tag中,示例:description:"Comment"
	Comment string
	// 生成结构体字段时候的信息
	StructFieldInfo StructFieldInfo
}

type Dialect

type Dialect string

Dialect 数据库方言

const (
	DialectMysql    Dialect = "mysql"
	DialectPostgres Dialect = "postgres"
	DialectSqlite   Dialect = "sqlite"
)

type Input

type Input struct {
	OutputDir        string    // 输出目录
	Database         string    // 数据库名
	Dialect          Dialect   // 数据库方言("mysql"、"postgres"、"sqlite")
	TableName        string    // 表名(支持任意命名风格,用于推导文件名和结构体名)
	TableComment     string    // 表注释
	ColumnTagName    string    // 表字段的结构体字段的 tag 名称(如 "column"、"db" 等)
	JsonTagValueCase NameCase  // JSON tag 的命名风格,空值不生成 json tag
	Columns          []*Column //表所有的字段
}

type NameCase

type NameCase string
const (
	// NameCaseLowerCamel lowerCamel 风格,如 getUserById
	NameCaseLowerCamel NameCase = "lowerCamel"
	// NameCaseUpperCamel upperCamel 风格,如 GetUserById
	NameCaseUpperCamel NameCase = "upperCamel"
	// NameCaseLowerSnake lowerSnake 风格,如 user_id
	NameCaseLowerSnake NameCase = "lowerSnake"
	// NameCaseUpperSnake upperSnake 风格,如 USER_ID
	NameCaseUpperSnake NameCase = "upperSnake"
	// NameCaseLowerKebab lowerKebab 风格,如 user-id
	NameCaseLowerKebab NameCase = "lowerKebab"
	// NameCaseUpperKebab upperKebab 风格,如 USER-ID
	NameCaseUpperKebab NameCase = "upperKebab"
)

func (NameCase) IsValid

func (c NameCase) IsValid() bool

IsValid 判断 NameCase 是否为已定义的枚举值

type StructFieldInfo

type StructFieldInfo struct {
	Name         string // 表字段转成结构体字段的名字
	Type         string // 表字段类型转成结构体字段的类型
	Import       string // Type 对应的 import 路径(如 time.Time 需要 "time"),空值不引入任何包
	JsonTagValue string //表字段转成结构体字段的json tag的值
}

StructFieldInfo 生成结构体字段时候的信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL