Golang:如何正确处理动态选择查询

在 go 中处理 select sql 查询结果的最佳方法是什么?


上下文(这就是我到目前为止所得到的...):


@更新


func (s *SQLServiceServer) select_query_func() {

    

    // db_connection and validation


    rows, err1 := db.Query(request.GetQuery())


    if err1 != nil {

        panic(err1)

    }


    defer rows.Close()


    columns, err2 := rows.Columns()


    if err2 != nil {

        panic(err2)

    }


    // Loop through rows, using Scan to assign column data to struct fields.

    for rows.Next() {

        values := make([]interface{}, len(columns))


        for i := range values {

            values[i] = new(interface{})

        }

        if err2 = rows.Scan(values...); err2 != nil {

            panic(err2)

        }


        for i := range values {

            fmt.Println(values[i])

        }

    }


    return requestOutput(REQUEST_OK, RESULT_OK, ERROR_NULL)

}

总结一下,最好的方法是什么?


我提到的错误

http://img4.mukewang.com/63845975000137fa10260293.jpg

芜湖不芜
浏览 110回答 1
1回答

杨__羊羊

Scan需要分配的,即非零指针作为参数。允许以下类型:*string*[]byte*int, *int8, *int16, *int32, *int64*uint, *uint8, *uint16, *uint32, *uint64*bool*float32, *float64*interface{}*RawBytes*Rows (cursor value) any type implementing Scanner (see Scanner docs)因此,要修复您的代码,您需要values使用非零指针填充切片,并且为了您的目的,这些指针可以是类型*interface{}。for rows.Next() {    values := make([]interface{}, len(columns))    for i := range values {        values[i] = new(interface{})    }    if err := rows.Scan(values...); err != nil {        return err    }}
打开App,查看更多内容
随时随地看视频慕课网APP