如何在Golang中同时迭代sql结果集?

Har*_*ker 8 go

next()方法是顺序的,有没有办法同时迭代循环?

我有一个200k行的结果集,我按顺序循环并在每一行上执行逻辑并想要将其拆分.

Dav*_*rth 8

你从查询中获得的sql.Rows不能同时使用(我相信).

但你可以在goroutines做大部分繁重的工作.

以下是Play上的示例(非工作但非常接近)

package main

import "fmt"
import "sql"

type Row struct {
    x string
    y string
    z string
}

func processor(ch chan Row) {
    for row := range <-ch {
        // be awesome
    }
}
func main() {
    ch := make(chan Row)
    // two handler go routines (current processors)
    go processor(ch)
    go processor(ch)
    rows := db.Query("select x,y,z from whatever")
    for rows.Next() {
        var row Row
        if err := rows.Scan(&row.x, &row.y, &row.z); err != nil {
            // do something with error
        } else {
            ch <- row
        }
    }
}
Run Code Online (Sandbox Code Playgroud)