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)
}为了满足需求,最好的方法是什么?
我提到的错误

发布于 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{}类型的。
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
}
}https://stackoverflow.com/questions/71797042
复制相似问题