我有一个在获取路径后要读取的分隔文件列表。我没有将路径保存为字符串,而是想知道我可以简单地存储* 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
}
}
我的代码类似于上面的示例编译,但我不知道这是推荐(或工作)。任何意见?谢谢!
答案 0 :(得分:1)
Scanner
是一个复杂的结构,是一个嵌入缓冲区的结构。缓冲区可以动态增长(取决于scan
函数请求的内容),最高可达64kB(MaxScanTokenSize
)。
因此,一般来说,保持冗余Scanner
并不是一个好主意,因为在Scanner
被丢弃之前无法释放缓冲区。但是,在你的情况下,或许几兆字节的内存并不重要。