Golang Go语言中这个 struct 是用的什么生成的

发布于 1周前 作者 caililin 来自 Go语言

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

http://sql2struct.atotoa.com/

utools 里的 sql2struct 生成也不一样

有没大佬推荐个好用点的 或 跟这个 生成一模一样的。


Golang Go语言中这个 struct 是用的什么生成的

更多关于Golang Go语言中这个 struct 是用的什么生成的的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

18 回复

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/?

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 注释删了就行了。

挺有意思,刚才用 JS 手写了一个 DDL 的解析器,可以将这种 CREATE TABLE 转换成 JSON ,然后有了 JSON 以后就可以用来生成代码了,仓促之下只做了 CREATE TABLE 这种 SQL 语句,写的也比较凌乱,可能还有一些 BUG ,不过可以自行拓展。

地址: https://jsfiddle.net/AlexMaho/b6c1utoe/

在Golang(通常简称为Go)中,struct(结构体)是一种用户自定义的数据类型,用于将零个或多个任意类型的字段组合在一起。Go语言本身并不直接提供从其他格式(如JSON、XML等)自动生成struct定义的内置功能,但开发者可以使用各种工具和库来辅助这一过程。

  1. 手动定义:最常见的方式是手动编写struct定义。开发者根据需求,明确指定每个字段的名称和类型。

  2. 代码生成工具:对于需要处理复杂数据结构(如从JSON或数据库模式生成struct)的情况,开发者可以使用代码生成工具。例如,json-to-go这样的在线工具可以帮助你从JSON数据快速生成对应的Go struct定义。同样,一些ORM(对象关系映射)库,如GORM或XORM,也提供从数据库表结构生成Go struct的功能。

  3. 第三方库:在处理JSON数据时,Go的encoding/json标准库允许你将JSON数据解码(unmarshal)到预定义的struct中,或者将struct编码(marshal)为JSON数据。这要求开发者事先定义好与JSON结构相匹配的struct

总之,Go语言中的struct是通过开发者手动定义或使用代码生成工具和第三方库辅助生成的,而不是由Go语言本身直接生成的。选择哪种方式取决于具体的应用场景和需求。

回到顶部