
免费学习网站:itgogogo.cn
大家好,我叫皇子。
马斯克“怒喷”OpenAI,应该取名为“CloseAI”之后,6个月掏出3410亿参数自研大模型,还正式开源了,马斯克说到做到!
此次开源的Grok-1是一个3140亿参数的混合专家模型——就是说,这是当前开源模型中参数量最大的一个。
其代码和模型权重已上线GitHub,截止 3 月 20 日下午17时许,已揽获 38.2k 标星。
既然马斯克都开源了大模型,我也开源了一个模型生成工具gormstruct。说下,这两个开源项目的不同之处:
1、使用场景不同:Grok是 AI 大语言模型;gormstruct是模型生成工具:根据数据库表名生成 golang gorm 模型和 DAO 层数据操作方法。
2、发布时间不同:马斯克开源的时间,不如我早,我在 2 年前, 2022年1月11日就开源了,不过这个标星数少得可怜。
下面介绍下,模型生成工具gormstruct的功能、使用方式、注意点等,更多内容请查看 README 文档。
自动判断是否存在软删除字段,存在则默认过滤非软删除记录。
SetXxx()、GetXxx()方法:用户设置/获取模型下指定字段的值。生成操作表的基本方法,对应文件名:base_DAO.go
对应的表 DAO 层:xxx_dao.go 里面包含多种操作表数据的简单、易用、易维护方法。
./config/config.bak.yaml为./config/config.yamldbinfo为自己的数据库链接配置# 数据库设置
dbinfo:
host: 127.0.0.1
port: 3306
username: root
password: root
database: ticket # 该参数可通过命令行设置,命令行设置会覆盖该值。如果未设置则必须在命令中指定
type: 0 # 数据库类型:0:mysql
go run main.go -t={数据库下的表名}会在./out/model下生成3个文件go run main.go --help
go run main.go gen --help
表名参数(-t)必填!
go run main.go -t=users [-p=model] [-s=Users]
go run main.go --table=users [--packageName=model] [--structName=Users]
-d, --database string 指定连接的数据库名【在yaml配置时可选,命令设置优先级大于配置】
-t, --table string 指定的表名【必填】
-h, --help help for gen
-p, --packageName string 生成的包名【可选,默认:model】
-s, --structName string 表名对应结构体【可选,默认:表名的大驼峰命名】
❝零值:0、''、false
当通过表模型结构体更新数据时,
⚠️注意:工具会根据是否允许为空,判断允许为空则设置为指针,反之不设置;如果表设计是不允许为空,但是有存在零值,只能手动改为指针
gorm 原生的 Save 是一个组合函数。如果保存值不包含主键,它将执行 Create,否则它将执行 Update (包含所有字段)。
当使用表模型结构体作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为 0、''、false 或其他零值,该字段不会被用于构建查询条件。但通过该工具生成的DAO层WithXxx和WithXxxs作为条件则可以忽略这个,因为底层是用 map
CreatedAt/UpdatedAt:
[x] 当时间格式未使用整型时间戳,而是 timestamp/datatiem 时:结构体字段类型使用 *time.Time,而不是 time.Time, 避免初始化变量或者数据json转化后使用time.Time的默认值:0001-01-01 00:00:00 +0000 插入数据,导致查询删除字段是否为空错误。
另外一种方案是使用:gorm.DeletedAt 字段类型---本库未使用。
[x] UpdateOrCreate 方法中,Fixed #1:有些表的主键不是以id命名。这是针对下面的网友提的Issue 而解决的,在此感谢反馈,也欢迎大家参与。

最后贴一下马斯克和我的开源项目仓库地址。
推荐阅读
点个在看或赞再走呀~这是我持续分享的动力
原文作者:皇子谈技术;如有侵权,请联系管理员删除。