我目前在 Perl 中处理了 5 个巨大的(每个 400 万行)日志文件,我想我可以尝试在 Go 及其并发功能中实现相同的功能。因此,由于对 Go 非常缺乏经验,我正在考虑按以下方式进行操作。对这种方法的任何评论将不胜感激。一些粗略的伪代码:


var wg1 sync.WaitGroup

var wg2 sync.WaitGroup


func processRow (r Row) {

    wg2.Add(1)

    defer wg2.Done()

    res = <process r>

    return res

}


func processFile(f File) {

    wg1.Add(1)

    open(newfile File)

    defer wg1.Done()

    line = <row from f>

    result = go processRow(line)

    newFile.Println(result) // Write new processed line to newFile

    wg2.Wait()

    newFile.Close()


}


func main() {


    for each f logfile {

        go processFile(f)

    }

    wg1.Wait()

}

所以,想法是我同时处理这 5 个文件,然后每个文件的所有行也将依次同时处理。


那行得通吗?