在 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)}总结一下,最好的方法是什么?我提到的错误
1 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
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
}
}
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报
0/150
提交
取消