首页 > 数据库 >根据建表sql语句生成go的struct代码工具

根据建表sql语句生成go的struct代码工具

时间:2024-03-03 16:44:17浏览次数:28  
标签:建表 struct form json sql go example sql2struct

sql2struct

一个根据"CREATE TABLE"建表语句生成对应的Go语言结构体的工具,暂只支持 MySQL 表。

开发目的

在 github 中找到一些 sql2struct,但要么是 chrome 插件,要么是在线工具,要么是需要连接 MySQL,不是很方便。本 sql2struct 根据 SQL 文件中的建表语句来生成 Go 的 struct,可集成到 Makefile 等中,方便使用。

安装方法

go install https://github.com/eyjian/sql2struct@latest

执行成功后,在 $GOPATH/bin 目录下可找到 sql2struct:

# file `go env GOPATH`/bin/sql2struct
/root/go/bin/sql2struct: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

使用示例

sql2struct % cat example-01.sql
DROP TABLE t_products;
CREATE TABLE t_products (
                          f_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID',
                          f_name VARCHAR(255) NOT NULL COMMENT '商品名称',
                          f_description TEXT,
                          f_price DECIMAL(10, 2) NOT NULL,
                          f_weight FLOAT NOT NULL COMMENT '商品重量(kg)',
                          f_quantity SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '商品库存数量',
                          f_is_active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '商品是否激活(0 - 未激活,1 - 激活)',
                          f_rating DOUBLE COMMENT '商品评分',
                          f_created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '商品创建时间',
                          f_updated_at DATETIME ON UPDATE CURRENT_TIMESTAMP COMMENT '商品更新时间',
                          UNIQUE INDEX idx_name_at (f_name),
                          INDEX idx_created_at (f_created_at),
                          KEY idx_updated_at (f_updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
sql2struct % 
sql2struct % ./sql2struct -sf=./example-01.sql --package="test"
// Package test
// Generated by sql2struct at 2024-03-03 14:36:28
package test

// Products Generated by sql2struct at 2024-03-03 14:36:28
type Products struct {
    Id uint32 `gorm:"column:f_id" json:"Id" db:"f_id" form:"Id"` // 商品id
    Name string `gorm:"column:f_name" json:"Name" db:"f_name" form:"Name"` // 商品名称
    Description string `gorm:"column:f_description" json:"Description" db:"f_description" form:"Description"`
    Price float64 `gorm:"column:f_price" json:"Price" db:"f_price" form:"Price"`
    Weight float32 `gorm:"column:f_weight" json:"Weight" db:"f_weight" form:"Weight"` // 商品重量(kg)
    Quantity uint32 `gorm:"column:f_quantity" json:"Quantity" db:"f_quantity" form:"Quantity"` // 商品库存数量
    IsActive int32 `gorm:"column:f_is_active" json:"IsActive" db:"f_is_active" form:"IsActive"` // 商品是否激活(0 - 未激活,1 - 激活)
    Rating float64 `gorm:"column:f_rating" json:"Rating" db:"f_rating" form:"Rating"` // 商品评分
    CreatedAt time.Time `gorm:"column:f_created_at" json:"CreatedAt" db:"f_created_at" form:"CreatedAt"` // 商品创建时间
    UpdatedAt time.Time `gorm:"column:f_updated_at" json:"UpdatedAt" db:"f_updated_at" form:"UpdatedAt"` // 商品更新时间
}

使用约束

  • sql 中的分割须为空格,而不能是 TAB
  • 命令行参数"--sf"指定的 sql 文件只能包含一个"create table"建表语句,不指定同一个 sql 文件含多个建表语句,但大写或者小写不影响
  • 生成的时为排版的,需要自行格式化
  • 生成的 Go 结构体中,字段名、类型、注释等信息都是从 sql 语句中解析出来的,如果 sql 语句中的字段名、类型、注释等信息不规范,生成的 Go 结构体也会不规范

使用提示

  • 建议将 sql2struct 放到 PATH 指定的目录,比如 /usr/bin/ 或 $GOPATH/bin/ 目录下,以便在任何地方都可以直接使用
  • 运行成功,程序退出码为 0,否则为非 0,Shell 中可通过"$?”的值来区分
  • 结果直接屏幕输出,可重定向到文件中
  • 通过重定向,可实现多个 SQL 文件对应一个 Go 代码文件
  • 默认不输出取表名函数,可通过参数"--with-tablename-func"开启
  • 默认 json 和 form 两种 tag 会去掉字段名的前缀部分,但可通过命令行参数"-json-with-prefix”和"-form-with-prefix"分别控制

Makefile 中应用示例

sql2struct % cat Makefile.example
all: sql sql-01 sql-02 sql-03

.PHONY: sql

sql:
	rm -f example.go

sql-01: example-01.sql
	sql2struct -sf=$< -package="main" -with-tablename-func=true >> example.go

sql-02: example-02.sql
	echo "" >> example.go&&sql2struct -sf=$< -with-tablename-func=true >> example.go

sql-03: example-03.sql
	echo "" >> example.go&&sql2struct -sf=$< -json-with-prefix=true >> example.go

标签:建表,struct,form,json,sql,go,example,sql2struct
From: https://www.cnblogs.com/aquester/p/18050249

相关文章

  • Go - Optimization - instruction-level parallelism (ILP)
      ......
  • 新电脑装编程配置(jdk、MySQL、navicat、idea、Maven、gitee、环境配置)
    一、JDK(java运行环境,不安装不能在自己电脑上运行java语言)1.打开安装包     2.选择安装目录(建议选择非系统盘)      3.安装JRE(最好和JDK分开文件夹、建议选择非系统盘)     4.提示安装成功     配置环境变量:JAVA......
  • MySQL之存储引擎
    什么是存储引擎数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt、pdf、word、mp4等等)不同的存储引擎提供不同的存储机制、索引机制......
  • MySQL之SQL语句+严格模式
    SQL使用规范在数据库管理系统中,SQL语句关键字不区分大小写(但建议用大写),参数区分大小写。建议命令大写,数据库名、数据表名、字段名统一小写,如数据库名、数据表名、字段名与关键字同名,使用反引号圈起来,避免冲突。SQL语句可单行或多行书写,默认以英文分号(;)结尾,关键词不能跨多......
  • MySQL之初识数据库
    linux安装更新YUM源:sudorpm-Uvhhttps://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm安装MySQL:sudoyum-yinstallmysql-community-server--enablerepo=mysql80-community--nogpgcheck启动数据库netstartmysql或者sudosystemctlstartmysq......
  • MySQL之MySQL数据库安装
    了解各种服务器的端口MySQL:3306Redis:6379MongoDB:27017Django:8000flask:5000MySQL介绍MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下公司。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDa......
  • 构建类问题 constructive problem 2007,
    2007.FindOriginalArrayFromDoubledArrayAnintegerarray original istransformedintoa doubled array changed byappending twicethevalue ofeveryelementin original,andthenrandomly shuffling theresultingarray.Givenanarray cha......
  • Sqlite For C# EF
    SqliteEF1.创建控制台项目Lession12.安装Sqliteinstall-packagesystem.data.sqliteinstall-packagesqlite.Codefirst//CodeFirst用于生成数据库表结构,否则不会自动生成表结构3.修改配置文件app.config<?xmlversion="1.0"encoding="utf-8"?><configuration>......
  • PostgreSQL初体验及其与MySQL的对比
    因为工作的原因接触到了pgsql数据库,对PostgreSQL的体系和运维操作也有了一定的了解。PostgreSQL在官网上标称为世界上最先进的开源数据库,而MySQL在官网上标称的是世界上最流行的开源数据库,可见PostgresSQL还是比较高调的。一、PostgreSQL初体验首先是数据库的安装,PostgreSQL官网......
  • powershell连接sqlite
    试着用powershell连接sqlite数据库,网上搜到RayFerrell的”SQLitewithPowerShell:AStep-by-StepGuidetoDatabaseManagement“一遍,验证有效,就是广告太多不给出链接了。第一步是需要donet驱动(可以看出ms自家的脚本和dotnet的深度集成)到sqlite主页下载System.Data.SQLite,htt......