for
ループ内のファイルを開き、その繰り返しの最後に終了する場合は、Close
をすぐに呼び出すか、Defer
をクロージャを使用してトリックする必要がありますか?ループのファイルを開いてコピーする
私は、一連のファイル名を、chan string
から読み込み、zipファイルにコピーするデータを持っています。これはすべてgo funcで処理されます。私for
ループ内
go func(fnames <-chan string, zipfilename string) {
f, _ := os.Create(zipfilename) // ignore error handling for this example
defer f.Close()
zf := zip.NewWriter(f)
defer zf.Close()
for fname := range fnames {
r, _ := os.Open(fname)
w, _ := zf.Create(r.Name())
io.Copy(w, r)
w.Close()
r.Close()
}(files, "some name.zip")
、書くために、より慣用的な移動のようになります。
for fname := range fnames {
func(){
r, _ := os.Open(fname)
defer r.Close()
w, _ := zf.Create(r.Name())
defer w.Close()
io.Copy(w, r)
}()
}
または私はと書かれた私のコードを続行すべきか?
私は、他のものより多かれ少なかれ慣れているとは思わないが、最初の方が簡単です。エラー値をチェックするのは慣習的です。そのコードを追加すると、2番目の方法が簡単になります。 –