在 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 關注
- 175 瀏覽
添加回答
舉報
0/150
提交
取消