使用* bufio.Scanner列表来获取稍后在golang中读取的文件是一个好主意吗?

时间:2017-07-11 23:39:10

标签: go

我有一个在获取路径后要读取的分隔文件列表。我没有将路径保存为字符串,而是想知道我可以简单地存储* bufio.Scanner的列表,以便以后更容易阅读(代码也会更清晰)?这是一个简单的例子:

func main(){
    scannerList := read(filenameList)
    dowork(scannerList)
}

func read(filenameList []string) (scannerList []*bufio.Scanner){
    for _, filename := range filenameList{
        op, _ := os.Open(filename)
        defer op.Close()
        scanner := bufio.NewScanner(op)
        scannerList = append(scannerList, scanner)
    }
    return
}

func dowork(scannerList []*bufio.Scanner){
    for _, scanner := range scannerList{
        for scanner.Scan(){
            //read stuff
        }
        //do stuff
    }
}

我的代码类似于上面的示例编译,但我不知道这是推荐(或工作)。任何意见?谢谢!

1 个答案:

答案 0 :(得分:1)

Scanner是一个复杂的结构,是一个嵌入缓冲区的结构。缓冲区可以动态增长(取决于scan函数请求的内容),最高可达64kB(MaxScanTokenSize)。

因此,一般来说,保持冗余Scanner并不是一个好主意,因为在Scanner被丢弃之前无法释放缓冲区。但是,在你的情况下,或许几兆字节的内存并不重要。