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

2023-11-30

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

但是,在示例中 - 所有列值都转换为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{}


See 这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 < len(colNames); i++ {
    colPtrs[i] = &cols[i]
}
for rows.Next() {
    err = rows.Scan(colPtrs...)
    if err != nil {
        log.Fatal(err)
    }
    for i, col := range cols {
        myMap[colNames[i]] = col
    }
    // Do something with the map
    for key, val := range myMap {
        fmt.Println("Key:", key, "Value Type:", reflect.TypeOf(val))
    }
}

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go SQL 驱动程序获取接口{}列值 的相关文章

随机推荐

  • 如何正确调用setListAdapter

    我已经搜索了很多如何解决这个问题 但没有得到任何结果 我需要的唯一帮助是 请看一下 stackoverflow 上提出的这个问题和答案 这是来自的问题this link 我的活动不扩展 ListActivity 因此此行会引发错误 setL
  • 获取进程/线程的上下文切换次数

    出于好奇 我想知道我的程序被操作系统切换了多少次上下文 就像所有寄存器都被保存并且控制权被传递给另一个进程或线程一样 然后一段时间后一切都恢复了 我们继续 因为它从未发生过 系统是否在某个地方维护了这样的数字 或者是否存在某种黑客行为或其他
  • 将标签与其各自的字段 Swing 一起排列

    我需要将所有字段与相应的标签对齐 这是我的代码 public class Progress extends JPanel implements ActionListener public JLabel ClientIP JTextField
  • 错误渲染视图:java.lang.IllegalStateException:已为此响应调用 getOutputStream()

    我正在 JSF 和 spring 中创建一个项目 其主要目的是在浏览器中生成 PDF 文件 一切看起来都很好 也生成了 pdf 但在控制台上我遇到了这个异常 有人对此有任何想法吗 我搜索了一下 发现很多人都有这个问题 但我没有找到适合我的问
  • CSS、嵌套 div 和边距与填充

    我完全理解盒子模型 这个问题更多的是试图确定关于何时使用边距和何时使用填充的语义方法 这是一个典型的例子 首先 用简单的英语来说 情况 我们有一个容器div 里面有一个段落元素 目标 在 div 内部和段落外部之间有 12px 的空间 选项
  • C# Windows Universal 10 TopMost 窗口

    我正在开发一个 Windows 10 通用应用程序 UWP 是否可以将应用程序设置为 TopMost 始终位于顶部 喜欢WPF or Winforms 最上面的属性 Thanks Creators Update 中添加了一项名为 Compa
  • 映射两个列表[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我最近问了一个关于使用apply函数作用于两个列表 每
  • 什么 SQL 查询或视图将显示“动态列”

    我有一个数据表 我允许人们向该表添加元数据 我为他们提供了一个界面 允许他们将其视为向存储数据的表添加额外的列 但实际上我将数据存储在另一个表中 Data Table DataID Data Meta Table DataID MetaNa
  • CSS 元素恢复默认样式

    CSS 中有没有一种快速的方法来删除应用于元素的所有样式 例如 假设某种选项卡菜单 div class outer div div div div div div div div div CSS 应用 outer foo blee bar
  • 自定义地图功能 - 它是如何工作的?

    对于不清楚的主题标题 我深表歉意 我在计划中有这个函数 它是map功能 它工作得很好 但我在试图理解它时迷失了方向 define my map proc ls letrec iter lambda proc ls0 if null ls0
  • C++ 使用多个分隔符分解字符串[重复]

    这个问题在这里已经有答案了 可能的重复 C 中通过多个分隔符将字符串拆分为单词 我目前正在尝试读取一个文件 其中每行都有不同的制表符和空格 用于分隔需要插入二叉树中的关键属性 我的问题是 如何仅使用 STL 使用多个分隔符分割一行 在一天的
  • document.elementFromPoint(x,y) 获取 iframe 内的元素

    我试图获取 html 页面中的元素 我使用 document elementFromPoint x y 来检测输入元素 当没有 iframe 时它工作正常 但在 iframe 内部 它在这段代码中不起作用 html如下 我错过了什么吗 di
  • RequireJS 未加载名为“module.js”的文件或模块

    我刚刚开始使用 RequireJS 我尝试了一个简单的代码 但一种方法有效 但另一种方法无效 文件夹 script 有 main js module js require js 在 main js 中 requirejs module fu
  • 克隆控件 - C# (Winform) [重复]

    这个问题在这里已经有答案了 可能的重复 是否可以复制某个控件的所有属性 C 窗口窗体 我必须创建一些类似于设计时创建的控件的控件 创建的控件应该具有与预定义控件相同的属性 或者换句话说 我想复制一个控件 有没有一行代码可以达到这个目的 或者
  • 快速屏蔽圆段

    I m creating a simple player app There is a circle that shows a progress of playing a song 在 Swift 中绘制这个圆圈并制作蒙版的最佳方法是什么
  • 获取当前类的typedef

    我目前正在将 boost intrusive ptr 与我的 GUI 类一起使用 虽然这或多或少是一个方便的问题 但是否有正确的方法来获取当前类的类型名 我问的原因是我有一个用于定义不同指针类型的宏 define INTRUSIVE PTR
  • Python - 从 Selenium 中 ::before 伪元素上的 CSS 属性“content”获取文本?

    我正在尝试抓取一些元素并返回网页上显示的文本 我相信我可以通过 css selectors 和 xpaths 很好地找到元素 但我无法返回所需的文本 下面是我的程序 from selenium import webdriver from s
  • 使用 LoginButton 监听 Facebook 注销。 (4.1)

    我一直在阅读 但尚未找到解决方案 所以就这样吧 我正在尝试升级到 Facebook 的新 SDK 4 1 Android SDK 我可以使用以下代码使用 Facebook 的 LoginButton 成功登录用户 facebookLogin
  • pip install 中的方括号是什么意思?

    我看到越来越多的命令是这样的 pip install splinter django 这些方括号有什么作用 您使用的语法是 pip install project extra 就你而言 你是installing the splinter软件
  • Go SQL 驱动程序获取接口{}列值

    我正在尝试使用 go sql 驱动程序从数据库表中读取数据 并将这些值转换为 map string interface 列名是映射的键 值是interface 我将所有列添加到一个数组中 我正在使用 RawBytes 的代码示例 位于htt