在 Go 中将 SELECT * 列读取到 []string 中的复杂性
数据处理中的一个常见任务是从数据库表中检索行并以方便的格式存储它们。在Go中,您可以使用database/sql包来与数据库交互。但是,遇到数量可变且类型未知的列可能会带来挑战。
sql.Rows 类型提供对查询结果的访问,但其 Scan 方法需要填充键入的字段。直接将值转换为字符串切片 ([]string) 并不简单。
解决方案:利用接口切片
要解决此问题,您必须创建一个接口切片 ([]interface{}),它指向字符串切片中的每个字符串。这涉及分配一个临时切片并将每个元素设置为指向字符串切片中的相应元素。
示例代码:
rawResult := make([][]byte, len(cols)) result := make([]string, len(cols)) dest := make([]interface{}, len(cols)) // A temporary interface{} slice for i, _ := range rawResult { dest[i] = &rawResult[i] // Put pointers to each string in the interface slice }
一旦界面切片准备好后,您可以使用它来扫描行。
扫描行并转换为字符串
for rows.Next() { err = rows.Scan(dest...) if err != nil { fmt.Println("Failed to scan row", err) return } for i, raw := range rawResult { if raw == nil { result[i] = "\N" } else { result[i] = string(raw) } } fmt.Printf("%#v\n", result) }
这种方法允许您直接将列值读取到字符串切片,容纳可变数量和类型的列。
以上是如何在 Go 中将 SELECT * 列读入 [] 字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!