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

时间:2015-11-11 22:59:37

标签: go

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

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

1 个答案:

答案 0 :(得分:5)

您从查询中获取的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
        }
    }
}