golang语言sql Rows转化保存成map

本文详细解析了使用GoLang进行数据库查询的过程,包括如何构造查询语句、处理查询结果及错误,通过具体示例展示了GoLang中db.Query方法的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

func DoQuery(db *sql.DB, sqlInfo string, args ...interface{}) ([]map[string]interface{}, error) {
    rows, err := db.Query(sqlInfo, args...)
    if err != nil {
        return nil, err
    }
    columns, _ := rows.Columns()
    columnLength := len(columns)
    cache := make([]interface{}, columnLength) //临时存储每行数据
    for index, _ := range cache { //为每一列初始化一个指针
        var a interface{}
        cache[index] = &a
    }
    var list []map[string]interface{} //返回的切片
    for rows.Next() {
        _ = rows.Scan(cache...)
 
        item := make(map[string]interface{})
        for i, data := range cache {
            item[columns[i]] = *data.(*interface{}) //取实际类型
        }
        list = append(list, item)
    }
    _ = rows.Close()
    return list, nil
}

转载于:https://www.cnblogs.com/nyist-xsk/p/11414197.html

在Go语言(又称Golang)中,查询数据并将其装入map是一种常见的操作。Map在Go中是一个内置的数据结构,它可以存储键值对,其中的键必须是可比较的类型,而值可以是任何类型。 以下是一个简单的例子,展示了如何在Go中从数据库查询数据并将其装入map中: ```go package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" // 导入MySQL驱动 ) func main() { // 假设我们有一个数据库连接字符串 dbDSN := "user:password@tcp(localhost:5555)/dbname" // 连接到数据库 db, err := sql.Open("mysql", dbDSN) if err != nil { panic(err) } defer db.Close() // 执行查询 rows, err := db.Query("SELECT id, name FROM users") if err != nil { panic(err) } defer rows.Close() // 创建一个map来存储查询结果,键为id,值为name userMap := make(map[int]string) // 遍历查询结果 for rows.Next() { var id int var name string if err := rows.Scan(&id, &name); err != nil { panic(err) } // 将查询到的数据存入map userMap[id] = name } // 错误处理 if err := rows.Err(); err != nil { panic(err) } // 打印map中的数据 for id, name := range userMap { fmt.Printf("ID: %d, Name: %s\n", id, name) } } ``` 在这个例子中,我们首先导入了必要的包,然后定义了数据库连接字符串`dbDSN`。使用`sql.Open`函数打开数据库连接,并通过`db.Query`执行SQL查询,查询结果被遍历,并使用`rows.Scan`方法将每一行的数据填充到变量中。然后,我们把这些变量存入一个map中。在实际应用中,你需要根据你的数据库驱动和实际情况调整导入的包和数据库操作的细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值