一行命令实现mysql转go struct
source link: https://studygolang.com/articles/25361
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Githubd地址
中文文档 | DOCUMENT
okcli 可以将指定数据表生成为对应的model文件,目前支持将列名、数据类型、默认值、注释带入指定model中,
就像如下文件:
import "time" type ( Student struct { Id int32 `db:"id"` Name string `db:"name"` // the student's name Gender int8 `db:"gender"` // the student's gender,0-male,1-female,DEFAULT:0 Age int8 `db:"age"` // the student's age,DEFAULT:0 Class string `db:"class"` // the student's class CreateTime time.Time `db:"create_time"` // the column create time,DEFAULT:CURRENT_TIMESTAMP UpdateTime time.Time `db:"update_time"` // the column last update time,DEFAULT:CURRENT_TIMESTAMP } )
准备工作
根据自己的操作系统平台下载不同的二进制文件
- windows: okcli_windows.exe
- mac OS: okcli_darwin
- linux: okcli_linux
或者clone源码进行编译。
其次,将下载或编译后的二进制文件设置到环境变量中,以mac OS为例子:
假设二进制文件okcli存放在/usr/local/okcli文件目录下
$ sudo vi ~/.bash_profile
在文件末尾添加:
$ export OKCLI=/usr/local/okcli $ export PATH=$PATH:$OKCLI
最后执行以下 source ~/.bash_profile
使用说明
数据库准备
这里以本地数据库举例,在demo库下新建student、course、student_score表,sql如下:
CREATE TABLE `student` ( `id` int(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'the student''s name', `gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'the student''s gender,0-male,1-female', `age` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'the student''s age', `class` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'the student''s class', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'the column create time', `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'the column last update time', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Student info'; CREATE TABLE `course` ( `id` int(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'course name', `teacher` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'teach person', `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE `student_score` ( `id` int(20) NOT NULL, `student_id` int(20) NOT NULL DEFAULT '0', `course_id` int(20) NOT NULL DEFAULT '0', `score` tinyint(3) unsigned NOT NULL, `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `student_course_unique` (`student_id`,`course_id`), KEY `course_idx` (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
okcli命令准备
命令行参数
$ okcli NAME: okcli - a cli tool to generate model USAGE: okcli [global options] command [command options] [arguments...] VERSION: 0.0.1 COMMANDS: init generate the json configuration template gen generated from a configuration file help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --help, -h show help --version, -v print the version
生成model
1、配置文件生成
$ okcli init
执行命令后将会在当前目录生成一个config.json文件,内容模板如下:
// TODO: FILLED IN YOUR REAL VALUE AND DELETE THIS LINE { "username": "root", "password": "123456", "host": "localhost:3306", "database":{ "name":"demo", "tables":["student","course","student_score"] }, "tagPrefix":"db" }
- username:
数据库连接名
- password:
数据库连接密码
- host:
数据库连接地址
- database:
数据库名称和数据表名列表
- tagPrefix:
待格式化model中tag的前缀,默认为"db"
将config.json配置文件修改为你需要连接的数据库地址,填入待生成model的数据库名和表名。
2、执行okcli gen 命令
$ okcli gen -c ./config.json -o ./model successful,the path: /Users/anqiansong/go/src/okgo/model/student.go successful,the path: /Users/anqiansong/go/src/okgo/model/course.go successful,the path: /Users/anqiansong/go/src/okgo/model/studentscore.go
- c 指定配置文件路径
- o 指定model文件存放目录,默认为当前目录
执行以上命令将按照配置文件生成对应model文件,并存放在model文件夹中,如果指定model文件已经存在,则会提示你
WARNING:the file [student.go] would be override,Y/N?
3、生成model文件
- Student
package model import "time" type ( Student struct { Id int32 `gorm:"id"` Name string `gorm:"name"` // the student's name Gender int8 `gorm:"gender"` // the student's gender,0-male,1-female,DEFAULT:0 Age int8 `gorm:"age"` // the student's age,DEFAULT:0 Class string `gorm:"class"` // the student's class CreateTime time.Time `gorm:"create_time"` // the column create time,DEFAULT:CURRENT_TIMESTAMP UpdateTime time.Time `gorm:"update_time"` // the column last update time,DEFAULT:CURRENT_TIMESTAMP } )
- Course
package model import "time" type ( Course struct { Id int32 `gorm:"id"` Name string `gorm:"name"` // course name Teacher string `gorm:"teacher"` // teach person CreateTime time.Time `gorm:"create_time"` UpdateTime time.Time `gorm:"update_time"` } )
- StudentScore
package model import "time" type ( StudentScore struct { Id int32 `gorm:"id"` StudentId int32 `gorm:"student_id"` CourseId int32 `gorm:"course_id"` Score int8 `gorm:"score"` CreateTime time.Time `gorm:"create_time"` UpdateTime time.Time `gorm:"update_time"` } )
注意事项
model文件生成后目前可支持代码格式化,但是暂不支持包的自动引入,因此,在生成文件后你需要对model文件的
包进行检查导入。
结尾
如有对你有帮助,请帮忙点击一下在github给一下你的小星星作为我前进的动力。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK