初心者です。for文を試しに書いていた時に気になった事を質問をさせて頂きたいと思いました。
簡略化しているのでおかしい所はあるかもしれないのですが、上のコードはhoge関数をループさせ、下のコードはgoroutineで実行している関数の処理をループさせています。
下の処理の方だけおそらくメモリリークかな?と思うのですがエラーで処理が止まってしまいました。
fatal error: runtime: out of memory
goroutine 79 [running]:
(略)
goroutine 12 [sleep]:
(略)
とかなり長いエラーの文が表示されました。
下のコードではメモリリークが起き上のコードでは起きないのはどうしてなのでしょうか?
下のコードでメモリリークがおきずgoroutineで処理をし続けるループを書くにはどのようにすれば良いのでしょうか?
実用性はないかもしれないのですが勉強として気になりました。
メモリーの開放処理を書けばいのであればどのように書けば良いのか教えて頂きたいです。
よろしくお願いいたします。
func main(){ var aiueo = []{"あ","い","う",(略),"ん"}//あ〜んまでのスライス for { hoge(aiueo) } } func hoge(aiueo []string){ var wg sync.WaitGroup for _, v := range aiueo { wg.Add(1) go hoge2(v,&wg) } wg.Wait() } func hoge2(v string, wg *sync.WaitGroup){ defer wg.Done() fmt.Println(v) }
func main(){ var aiueo = []{"あ","い","う",(略),"ん"}//あ〜んまでのスライス hoge(aiueo) } func hoge(aiueo []string){ var wg sync.WaitGroup for _, v := range aiueo { wg.Add(1) go hoge2(v) } wg.Wait()//DoneがないのでWaitが発動しない } func hoge2(v string){ for{ fmt.Println(v) } }
go言語1.13
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/21 01:50
2020/05/21 02:10
2020/05/21 15:57