在GPT帮助下,我为hade增加了model自动生成api的功能

作者在hade v1.0.6版本中新增了根据model自动生成API的功能,借助GPT进行代码生成。通过GPT解决获取数据库表字段、Go代码生成等问题,实现了交互式的命令行工具。虽然GPT生成的代码需要人工审查,但大大减少了工作量。开发过程中,作者发现GPT在提供多种实现方式时需要适当引导,确保代码质量。
摘要由CSDN通过智能技术生成

前言:我为hade增加了model自动生成api的功能,这篇记录下我完成这个功能过程中是如何使用GPT来做协助的。

hade的v1.0.6版本发布,增加根据model自动生成api的功能

之前给hade增加过一个model gen的功能,就是配置好数据库的配置文件,自动生成数据表的gorm的模型文件。但是其实还可以更近一步,我可以生成model模型文件,那么我肯定就能生成这个model对应的api,当然前提是这个api是“按照某种规范”的。

所以hade的v1.0.6就迭代了下这个功能。官方文档更新如下:http://hade.funaio.cn/guide/model.html

在./hade model下增加了两个命令,形成3个命令

  • ./hade model api 通过数据表自动生成api代码

  • ./hade model gen 通过数据表自动生成model代码

  • ./hade model test 测试某个数据库是否可以连接

最复杂的就是./hade model api的命令,这里记录下开发这个命令的心路历程。

功能分析

要输入一个表名字,输出这个表的api等,首先我要获取这个表的所有字段和类型。

问题1:怎么获取一个表的所有字段

那么怎么获取一个表的所有字段和类型呢?我也先询问了下ChatGPT:

我们可以用gorm来获取一个表的所有字段到一个map[string]string 中。

具体使用的是这个sql语句:SHOW COLUMNS FROM student

可以使用GORM的Raw方法和Scan方法将SHOW COLUMNS FROM语句查询到的结果解析为一个map类型。具体的代码如下:

goCopy code
// 定义一个用于存储字段名和字段类型的结构体
type Column struct {
    Field string `gorm:"column:Field"`
    Type  string `gorm:"column:Type"`
}

// 定义一个map类型,用于存储字段名和字段类型
columns := make(map[string]string)

// 执行原始的SQL语句
rows, err := db.Raw("SHOW COLUMNS FROM student").Rows()
if err != nil {
    // 处理错误
}

// 逐行解析查询结果
for rows.Next() {
    var column Column
    if err := db.ScanRows(rows, &column); err != nil {
        // 处理错误
    }
    columns[column.Field] = column.Type
}

// 输出结果
fmt.Println(columns)

上述代码中,首先定义了一个结构体Column,用于存储每个字段的名称和类型。接着定义了一个map[string]string类型的变量columns,用于存储所有字段的名称和类型。

然后,使用Raw方法执行原始的SQL语句SHOW COLUMNS FROM student,并通过Rows方法获取查询结果的行数据。对于每一行数据,使用ScanRows方法将其解析为一个Column结构体,再将结构体中的Field字段作为columns的键,Type字段作为columns的值,存储到columns变量中。

最后,输出columns变量的内容,即可得到包含所有字段名称和类型的map。注意,在使用完查询结果之后,需要及时关闭rows,避免资源泄露。可以在循环结束后通过调用rows.Close()来关闭rows。

上述代码中的columns是一个map[string]string类型的变量,用于存储所有字段的名称和类型。它的输出结果类似于下面这个样子:

goCopy code
map[id:uint name:string age:uint class_id:uint]

输出结果中,map表示这是一个map类型的变量,而idnameageclass_id则是这个map中的键,它们的值分别是uintstring类型,表示对应字段的数据类型。注意,输出结果中各个键值对的顺序可能会因为内部实现原因而不同。

====

尝试了一下确实可行,但是在hade中,一切皆接口,于是我修改了一下之前的orm的接口协议。

type TableColumn struct {
 Field   string `gorm:"column:Field"`
 Type    string 	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值