Golang Go语言中这个 struct 是用的什么生成的
gorm
ddl 语句如下:
CREATE TABLE `pf_station_info` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '站点名称',
`location` json NOT NULL COMMENT '站点所在经纬度',
`ip_address` varchar(15) NOT NULL DEFAULT '' COMMENT '站点 ip 地址,非此 IP 数据不接收',
`tiger_shaped` char(32) NOT NULL DEFAULT '' COMMENT '握手符号',
`heartbeat` int unsigned NOT NULL DEFAULT '0' COMMENT '上次心跳时间戳',
`status` int NOT NULL DEFAULT '0' COMMENT '站点状态:0 正常,非 0 为停用时间戳',
`add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
要生成 如下 gorm struct , not null 以及 comment 也在 tag 里 且 location 类型 是 datatypes.JSON 类型
type Station struct {
Id int64 `json:"id" gorm:"primaryKey;autoIncrement;comment:主键 id"`
Name string `gorm:"type:varchar(20);column:name;not null;comment:站点名称" json:"name"`
Location datatypes.JSON `gorm:"type:json;column:location;not null;comment:站点所在经纬度" json:"location"`
IpAddress string `gorm:"type:varchar(15);column:ip_address;not null;comment:站点 ip 地址,非此 IP 数据不接收" json:"ip_address"`
TigerShaped string `gorm:"type:char(32);column:tiger_shaped;not null;comment:握手符号" json:"tiger_shaped"`
Heartbeat int64 `gorm:"type:int(10);column:heartbeat;not null;comment:上次心跳时间戳" json:"heartbeat"`
Status int64 `gorm:"type:int(11);column:status;comment:站点状态:0 正常,非 0 为停用时间戳" json:"status"`
AddTime time.Time `gorm:"type:datetime;comment:创建时间" json:"add_time,omitempty"`
UpdateTime time.Time `gorm:"type:datetime;comment:修改时间" json:"update_time,omitempty"`
}
有人知道 上面的 struct 是用 什么工具生成的吗?我猜不可能手写吧。
谷歌搜了下 看了好几个 根据 ddl 生成都不一样 ,比如下面的
https://www.qetool.com/sql_json_go/sql.html
utools 里的 sql2struct 生成也不一样
有没大佬推荐个好用点的 或 跟这个 生成一模一样的。
Golang Go语言中这个 struct 是用的什么生成的
更多关于Golang Go语言中这个 struct 是用的什么生成的的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
orm 不是從 struct 生成 sql 嗎,應該是手寫的吧
更多关于Golang Go语言中这个 struct 是用的什么生成的的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
#1 不能吧 先写 struct 再 根据 struct 生成 ddl 语句 吧。
那我这个 struct 怎么 生成 ddl 语句 ,用什么工具 转。
我现在想到是 ddl2struct 网上找的 不太一样 只能改改 ,因为好奇所以找了找 ,没找到 一样的。
说不定别人自己写的转换工具 ,哈哈
gorm v2 的 migrator interface 里面有个 create table 函数, v1 我记得就是在*gorm.DB 里面, 可以用这个函数创建表
可能用我这个工具生成完,然后自己改了一些 tag ? https://dou.tools/sql2struct/?
推荐官方下的一个工具 https://github.com/go-gorm/gen
copilot 可以根据 sql 语句注释之类的自动生成
应该是 gorm/gen ,具体字段生成出来的类型是可以自己设置的。
历史悠久的工具 codeSmith 就可以根据 schema 生成任何代码
不用 gorm
一般用 fraenky8/tables-to-go 生成 struct ,配合不到 500 行自己封装的 CURD 直接撸,至于 Database Design ,AutoMigrate 是直接用的 DbSchema 这款软件,爽的一批
看起来不错
结合 sql ,copilot 一直 tab 到底
我都是手写 tag ,用 gorm 的 migrate 创建表
copilot 就可以,把 DDL 以注释的形式粘在文件开头,然后开始写 struct ,写个一两行之后,后面的就都能用 copilot 补全一路 tab 出来。搞完了再把 DDL 注释删了就行了。
gorm 有个 gen 库 https://github.com/go-gorm/gen
挺有意思,刚才用 JS 手写了一个 DDL 的解析器,可以将这种 CREATE TABLE 转换成 JSON ,然后有了 JSON 以后就可以用来生成代码了,仓促之下只做了 CREATE TABLE 这种 SQL 语句,写的也比较凌乱,可能还有一些 BUG ,不过可以自行拓展。
地址: https://jsfiddle.net/AlexMaho/b6c1utoe/
在Golang(通常简称为Go)中,struct
(结构体)是一种用户自定义的数据类型,用于将零个或多个任意类型的字段组合在一起。Go语言本身并不直接提供从其他格式(如JSON、XML等)自动生成struct
定义的内置功能,但开发者可以使用各种工具和库来辅助这一过程。
-
手动定义:最常见的方式是手动编写
struct
定义。开发者根据需求,明确指定每个字段的名称和类型。 -
代码生成工具:对于需要处理复杂数据结构(如从JSON或数据库模式生成
struct
)的情况,开发者可以使用代码生成工具。例如,json-to-go
这样的在线工具可以帮助你从JSON数据快速生成对应的Gostruct
定义。同样,一些ORM(对象关系映射)库,如GORM或XORM,也提供从数据库表结构生成Gostruct
的功能。 -
第三方库:在处理JSON数据时,Go的
encoding/json
标准库允许你将JSON数据解码(unmarshal)到预定义的struct
中,或者将struct
编码(marshal)为JSON数据。这要求开发者事先定义好与JSON结构相匹配的struct
。
总之,Go语言中的struct
是通过开发者手动定义或使用代码生成工具和第三方库辅助生成的,而不是由Go语言本身直接生成的。选择哪种方式取决于具体的应用场景和需求。