登录
首页 >  Golang >  Go问答

Go SQL 驱动程序获取 interface{} 列值

来源:Golang技术栈

时间:2023-03-22 19:07:55 180浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《Go SQL 驱动程序获取 interface{} 列值》就很适合你!本篇内容主要包括Go SQL 驱动程序获取 interface{} 列值,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我正在尝试使用 go sql 驱动程序从数据库表中读取数据,并将值转换为[]map[string]interface{}. 列名是地图的键,值是interface{}。我将所有列添加到一个数组中。我使用[https://github.com/go-sql- driver/mysql/wiki/Examples](https://github.com/go-sql- driver/mysql/wiki/Examples)上的“RawBytes”代码示例作为开始的示例。

但是,在示例中 - 所有列值都转换string为如下,

// Fetch rows
for rows.Next() {
    // get RawBytes from data
    err = rows.Scan(scanArgs...)
    if err != nil {
        panic(err.Error()) // proper error handling instead of panic in your app
    }

    // Now do something with the data.
    // Here we just print each column as a string.
    var value string
    for i, col := range values {
        // Here we can check if the value is nil (NULL value)
        if col == nil {
            value = "NULL"
        } else {
            value = string(col) //ATTN : converted to string here
        }
        fmt.Println(columns[i], ": ", value)
    }
    fmt.Println("-----------------------------------")
}

有没有办法保留它,interface{}以便我可以在使用来自的列时进行必要的类型转换[]map[string]interface{}

正确答案

请参阅我的答案所基于的[此 https://stackoverflow.com/questions/20271123/go-lang-sql-in- parameters答案。](https://stackoverflow.com/questions/20271123/go-lang-sql-in- parameters)使用它,您可以执行以下操作:

var myMap = make(map[string]interface{})
rows, err := db.Query("SELECT * FROM myTable")
defer rows.Close()
if err != nil {
    log.Fatal(err)
}
colNames, err := rows.Columns()
if err != nil {
    log.Fatal(err)
}
cols := make([]interface{}, len(colNames))
colPtrs := make([]interface{}, len(colNames))
for i := 0; i 

使用反射包,您可以根据需要获取每列的类型,如最后的循环所示。

这是通用的,适用于任何表、列数等。

以上就是《Go SQL 驱动程序获取 interface{} 列值》的详细内容,更多关于golang的资料请关注golang学习网公众号!

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