首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Golang:如何正确处理动态选择查询

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

Stack Overflow用户
提问于 2022-04-08 12:30:33
回答 1查看 494关注 0票数 1

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

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

@更新

代码语言:javascript
复制
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)
}

为了满足需求,最好的方法是什么?

我提到的错误

EN

Stack Overflow用户

回答已采纳

发布于 2022-04-08 13:39:28

Scan要求分配(即非零)指针作为参数。允许使用下列类型:

*string *[]字节*int,*int 8,*int 16,*int 32,*int 64 *uint,*uint 8,*uint 16,*uint 32,*uint 64 *bool *float64 32,*float64 64*接口{} *RawBytes *行(游标值)任何实现扫描程序的类型(见Scanner )

因此,要修复您的代码,您需要使用非零指针填充values切片,并且为了您的目的,这些指针可以是*interface{}类型的。

代码语言:javascript
复制
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
    }
}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71797042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档