package main
import (
"os"
)
func main() {
for i := 0; i < 67757; i++ {
file, err := os.Open(".")
if err != nil {
panic(err)
}
defer file.Close()
}
}
この様にある一定数を超えると
panic: open .: too many open files
となります。
実行例 https://play.golang.org/p/FUxEJaRwO4
※PlayGroundの制限でメッセージは違います
解決案としては、1例として
for i := 0; i < 167757; i++ {
func() {
file, err := os.Open(".")
if err != nil {
panic(err)
}
defer file.Close()
}()
}
こういうふうに無名関数化すると、解決します。
原因は何かと言うと、defer
が実行されるタイミングと、ファイルを開ける限界数です。
実行例 https://play.golang.org/p/eePKDL0kNa
必要な部分を抽出して此処に書きましたが
どうでもいいこと含めた内容は別に書いてますー。
参考