Go SQL driver get interface{} 列值

我正在尝试使用 go sql 驱动程序从数据库表中读取数据,并将值转换为[]map[string]interface{}. 列名是映射的键,值是interface{}。我正在将所有列添加到一个数组中。我使用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{}


动漫人物
浏览 191回答 2
2回答

慕哥9229398

经过长时间的斗争,我找到了解决方案。检查以下将 sql.RawBytes 转换为 Int64 的函数。这可以很容易地改变以适应任何数据类型func GetInt64ColumnValue(payload sql.RawBytes) (int64, error) {content := reflect.ValueOf(payload).Interface().(sql.RawBytes) // convert to bytesdata := string(content) //convert to string  i, err := strconv.ParseInt(data,10,64)  // convert to int or your preferred data typeif err != nil {    log.Printf("got error converting %s to int error %s ",data,err.Error())    return 0, err}return i, nil}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go