栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang的SQL程序包不能进行临时/探索性查询吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang的SQL程序包不能进行临时/探索性查询吗?

sql.Rows
类型具有
Columns
可以为您提供结果列名称列表的方法。可以用来确定未知查询的列数。

在该

Scan
方法的文档中,它说:

如果参数的类型为 [] byte,则Scan会将相应数据的副本保存在该参数中。该副本归调用方所有,可以无限期修改和保存。可以通过使用
RawBytes类型的参数来避免复制。有关其使用限制,请参见RawBytes文档。

如果参数的类型为* interface {},则Scan会复制基础驱动程序提供的值,而无需进行转换。如果该值的类型为[]
byte,则进行复制,并且调用方拥有结果。

因此,当我们不知道列值的类型时(原始格式或Go类型),我们也支持扫描列值。

将这两者放在一起,您可以使用

...
语法调用可变参数函数来执行以下操作:

columnNames, err := rows.Columns()if err != nil {    log.Fatalln(err) // or whatever error handling is appropriate}columns := make([]interface{}, len(columnNames))columnPointers := make([]interface{}, len(columnNames))for i := 0; i < len(columnNames); i++ {    columnPointers[i] = &columns[i]}if err := rows.Scan(columnPointers...); err != nil {    log.Fatalln(err)}

现在,

columns
切片应包含当前结果行的所有列值的解码版本。

如果您对表格有额外的了解(例如,预期的类型,或者提前知道列数),则可以稍微简化一下逻辑。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号