在 Go 中将“SELECT *”列读入 [] 字符串
在数据库世界中,使用“SELECT”从表中获取数据”查询是一种常见的做法,但在编程领域,手动处理此类数据可能很麻烦。本文旨在利用强大的 Go 标准库,简化在 Go 中将“SELECT ”查询结果读取到 []string 切片的过程。
处理列数未知的表时和数据类型,挑战在于将数据捕获为结构化形式。 Rows 提供的 Scan 方法允许您将特定数据类型填充到预定义的变量中,但它不提供直接读取 [] 字符串的方法。
为了克服这个问题,我们采用了一种技术创建一个 []interface{} 切片,其中每个元素都是指向 []string 切片中字符串的指针。此桥接步骤允许 Scan 方法填充界面切片,然后可以轻松地将其转换为所需的 [] 字符串。
这是问题中提供的示例代码的修订版本:
func dumpTable(rows *sql.Rows, out io.Writer) error { colNames, err := rows.Columns() if err != nil { return err } writer := csv.NewWriter(out) writer.Comma = '\t' readCols := make([]interface{}, len(colNames)) writeCols := make([]string, len(colNames)) for i, _ := range writeCols { readCols[i] = &writeCols[i] } for rows.Next() { err := rows.Scan(readCols...) if err != nil { return err } writer.Write(writeCols) } if err = rows.Err(); err != nil { return err } writer.Flush() return nil }
此解决方案无缝地弥合了 Scan 方法和 []string 之间的差距,允许您将“SELECT *”查询结果存储为结构化且可用的格式。
以上是如何在 Go 中将'SELECT *”列读入 []string 切片中?的详细内容。更多信息请关注PHP中文网其他相关文章!