2017-07-11 6 views
0

私は、パスを取得した後に読み込まれる区切りファイルのリストを持っています。パスを文字列として保存するのではなく、単にbufio.Scannerのリストを保存すれば、あとで読むのがはるかに簡単になります(そしてコードもより洗練されます)。ここでは簡単な例である:上記の例のように後でgolangで読むファイルには* 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

Scannerは、複雑な構造であり、バッファを埋め込む構造です。バッファは、(scan関数が要求するものに応じて)最大64kB(MaxScanTokenSize)まで動的に拡張できます。

一般に、Scannerが破棄されるまでバッファを解放することはできないため、冗長性を維持することはお勧めしません。Scannerしかしおそらく数キロバイトのメモリは、あなたのケースではあまり重要ではありません。

+0

スキャナにop(os.Openからの)に関する情報があるかどうか分かりますか?言い換えれば、関数read()または関数dowork()の内部でトリガーされたop.Close()の遅延ですか?ありがとう! – Kyle

+0

これはスキャナとは関係がありません。あなたは 'read'で' Close'を呼び出します。したがって、 'close'は' read'で呼び出されます。 – Adrian

関連する問題