您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将go in [] string读入“ * ELECT *”列

将go in [] string读入“ * ELECT *”列

为了Scan将值直接转换成[]string,您必须创建一个[]interface{}指向字符串切片中每个字符串的切片。

在这里,您有一个适用的MysqL示例(只需更改sql.Open-command以匹配您的设置):

package main

import (
    "fmt"
    _ "github.com/go-sql-driver/MysqL"
    "database/sql"
)

func main() {
    db, err := sql.Open("MysqL", "user:pass@tcp(localhost:3306)/test?charset=utf8")
    defer db.Close()

    if err != nil {
        fmt.Println("Failed to connect", err)
        return
    }

    rows, err := db.Query(`SELECT 'one' col1, 'two' col2, 3 col3, NULL col4`)
    if err != nil {
        fmt.Println("Failed to run query", err)
        return
    }

    cols, err := rows.Columns()
    if err != nil {
        fmt.Println("Failed to get columns", err)
        return
    }

    // Result is your slice string.
    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 2022/1/1 18:45:34 有342人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶