Golang工具:将结构体转换为SQL表的实现方法
Golang工具:将结构体转换为SQL表的实现方法 大家好,我编写了一个工具,可以将 Go 结构体转换为 SQL 查询,该查询将创建一个包含结构体字段的表。这是第一个版本,我确实计划在未来改进它。它是用 100% 的 JavaScript 编写的,因为这非常适合这项任务。
附言:我在谷歌上搜索了类似工具后编写了这个工具,它与 PostgreSQL 配合使用效果最佳。
如果你想使用Go语法解析器,或许可以考虑使用WASM:

通过构建图像转ASCII转换器入门WebAssembly和Go

这篇博客阐述了如何将你现有的Go代码导入到Wasm,并在浏览器中运行。在这篇博客中,我将向你展示如何……
阅读时间:8分钟
我非常欣赏不向服务器回传任何数据的理念。Matt Holt出色的curl转go和json转go工具不会向服务器发送任何数据,因此我可以放心使用它们,无需担心隐私问题。所以,在我看来,让这一切100%在浏览器中运行是最理想的方式。
总之,这是一个很棒的开端。许多成功的开源项目都是这样开始的:有人为了解决自己遇到的问题而创建了一个解决方案。请继续努力!
这是一个非常实用的工具,特别是对于需要快速从Go结构体生成数据库表结构的开发者来说。不过,考虑到你提到这是用JavaScript编写的,而社区中其实已经存在一些成熟的、用Go语言原生实现的类似工具,它们可能更符合Golang开发者的工作流。下面我介绍两个主流的Go原生方案,并附上示例代码。
1. 使用GORM的AutoMigrate功能
GORM是Go中最流行的ORM库之一,其AutoMigrate方法能自动根据结构体创建或更新表结构。
package main
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"type:varchar(100);not null"`
Email string `gorm:"type:varchar(255);uniqueIndex"`
Age int
IsActive bool `gorm:"default:true"`
CreatedAt time.Time
}
func main() {
dsn := "host=localhost user=postgres password=secret dbname=test port=5432 sslmode=disable"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移,创建或更新表结构
err = db.AutoMigrate(&User{})
if err != nil {
panic("failed to migrate database")
}
}
2. 使用sqlc的SQL DDL生成
sqlc是一个通过SQL生成类型安全Go代码的工具,虽然主要面向查询,但可以配合其模式定义生成表结构。
首先创建schema.sql:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE,
age INT,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
然后配置sqlc.yaml:
version: "2"
sql:
- schema: "schema.sql"
queries: "queries/"
engine: "postgresql"
gen:
go:
package: "db"
out: "db/"
运行sqlc generate将生成对应的Go结构体。
3. 纯SQL生成工具:goverter
虽然主要用作转换器,但goverter的模式生成功能也可借鉴:
//go:generate goverter ./converter
package main
type User struct {
ID int64
Name string
Email string
}
// 生成对应的SQL创建语句
func (u User) ToSQL() string {
return `CREATE TABLE users (
id BIGINT PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
);`
}
对比总结:
- 你的工具:作为Web工具方便快速验证,适合前端或全栈开发者。
- GORM AutoMigrate:适合Go项目集成,支持数据库版本管理。
- sqlc:强调类型安全,从SQL schema生成Go代码。
- 纯代码生成:更灵活,可定制DDL逻辑。
如果你的工具能添加对GORM标签的支持(如gorm:"type:varchar(100)"),并支持导出为Go migration文件(如使用golang-migrate格式),对Go开发者会更有吸引力。现有的JavaScript实现作为原型验证很有价值,但长期来看,用Go重写核心逻辑可能更容易被Go社区采纳。


