簡単な例として、次のコードを検討してください。
func printer(c <-chan int) {
for {
fmt.Print(<-c)
}
}
func provide() {
c := make(chan int)
go printer(c)
for i := 1; i <= 100; i++ {
c <- i
}
}
この関数は、生成されたデータを出力provide
する go ルーチンを作成します。printer
provide
私の質問は、空のチャネルでprovide
戻ってブロックを開始した後に何が起こるかということです。printer
これ以上の参照がないため、go ルーチンはリークしますc
か、それともガベージ コレクターがこのケースをキャッチして、go ルーチンと の両方を破棄しc
ますか?
この種のコードが実際にメモリ リークを引き起こす場合、そのようなメモリ リークの発生を防ぐためにどのような戦略を立てることができますか?