登录
首页 >  Golang >  Go问答

如何从未知列的表中读取行并映射到地图

来源:stackoverflow

时间:2024-03-11 17:45:25 414浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《如何从未知列的表中读取行并映射到地图》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

在我的 golang 应用程序中,我需要对 mysql 进行 sql 查询以获取单行并将结果放入映射中[string]字符串键是列名称。

但我不知道什么是列。查询就像

select * from mytable

我使用“数据库/sql”。

我发现只有扫描功能

db.queryrow("select * from mytable").scan(&var1, &var2,...)

但这对我的情况不起作用。不知道会有多少变数。我还需要列名称。

可以用database/sql来做吗?

更新。我找到了如何解决这个问题的一部分。如何从结果集中获取列名。

rows, err := db.query(sqlcommand)

cols, err := rows.columns()

所以,我可以用来为地图制作按键。但我仍然不知道如何获取值。因为,值可以有不同的类型。

data = make(map[string]string)

if rows.Next() {
    columns := make([]interface{}, len(cols))
    columnPointers := make([]interface{}, len(cols))
    for i, _ := range columns {
        columnPointers[i] = &columns[i]
    }

    err = rows.Scan(columnPointers...)

    for i, colName := range cols {
        // value is in columns[i] of interface type.
        // How to extract it from here? 
        // ....
        data[colName] = val
    }
}

附注这个问题与“在 mysql 中获取表列名称?”不重复。 ”。我想要获取返回数据集的列,而不仅仅是一个表。


解决方案


您似乎走在正确的道路上。根据 Rows.Scan 的定义,您可以提供所需目标类型的值,此处为 string。因此,将 columns 的类型更改为 []string 应该可以:

var db sql.DB
var sqlcommand string

rows, _ := db.Query(sqlcommand)
cols, _ := rows.Columns()

data := make(map[string]string)

if rows.Next() {
    columns := make([]string, len(cols))
    columnPointers := make([]interface{}, len(cols))
    for i, _ := range columns {
        columnPointers[i] = &columns[i]
    }

    rows.Scan(columnPointers...)

    for i, colName := range cols {
        data[colName] = columns[i]
    }
}

以上就是《如何从未知列的表中读取行并映射到地图》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>