Golang SQL转Struct/JSON工具
有没有好用的Golang工具可以将SQL查询结果自动转换为Struct或JSON格式?目前手动映射字段很麻烦,想找个能自动生成对应结构体的工具。最好能支持多种数据库,使用起来简单方便,求推荐!
2 回复
推荐几个Golang工具:
- sqlc:根据SQL生成类型安全Go代码
- xorm/reverse:数据库反向生成结构体
- gormt:基于GORM生成结构体
- sqlboiler:功能强大的ORM代码生成器
这些工具都能将数据库表结构转换为Go结构体或JSON。
更多关于Golang SQL转Struct/JSON工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
推荐使用以下工具将Golang SQL查询结果转换为Struct或JSON:
1. sqlc (推荐)
go install github.com/kyleconroy/sqlc@latest
特点:
- 根据SQL schema自动生成类型安全的Go代码
- 支持PostgreSQL、MySQL
- 生成对应的CRUD操作
配置示例 (sqlc.yaml):
version: "2"
sql:
- engine: "postgresql"
queries: "query.sql"
schema: "schema.sql"
gen:
go:
package: "db"
out: "db"
2. xorm/reverse
go get xorm.io/xorm
go get xorm.io/reverse
使用:
reverse -f yaml reverse.yml
3. 手动转换工具函数
import (
"database/sql"
"encoding/json"
)
// SQL结果转JSON
func RowsToJSON(rows *sql.Rows) ([]byte, error) {
columns, err := rows.Columns()
if err != nil {
return nil, err
}
var results []map[string]interface{}
for rows.Next() {
values := make([]interface{}, len(columns))
valuePtrs := make([]interface{}, len(columns))
for i := range columns {
valuePtrs[i] = &values[i]
}
if err := rows.Scan(valuePtrs...); err != nil {
return nil, err
}
rowMap := make(map[string]interface{})
for i, col := range columns {
rowMap[col] = values[i]
}
results = append(results, rowMap)
}
return json.Marshal(results)
}
推荐方案
- 生产环境:推荐使用 sqlc,类型安全且性能最佳
- 快速原型:可使用手动转换函数
- 已有数据库:xorm/reverse 适合从现有数据库生成结构体
选择哪种工具取决于具体需求:sqlc适合新项目,xorm适合已有数据库迁移。

