Golang SQL转Struct/JSON工具

有没有好用的Golang工具可以将SQL查询结果自动转换为Struct或JSON格式?目前手动映射字段很麻烦,想找个能自动生成对应结构体的工具。最好能支持多种数据库,使用起来简单方便,求推荐!

2 回复

推荐几个Golang工具:

  1. sqlc:根据SQL生成类型安全Go代码
  2. xorm/reverse:数据库反向生成结构体
  3. gormt:基于GORM生成结构体
  4. 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适合已有数据库迁移。

回到顶部