LoginSignup
0
0

【Go言語】ゴルーチンが実行されずプログラムが終了する

Last updated at Posted at 2023-12-18

タイトルの通りです。初めてゴルーチンを勉強したときにハマっけど以外に回答を見つけられなかったのでメモします。

ある日、以下のようなコードを書いたときにsub関数の中が全く実行されずに困っていました。
実際にはこんな簡単ではなく少し複雑なコードだったので原因が分からずに困っていました。

package main

import (
	"fmt"
	"time"
)

func sub() {
	fmt.Println("sub done")
}

func main() {
	go sub()
	fmt.Println("main done")
}

// 実行時の出力
// main done

これはsubの中が実行されていくより先にmain関数が終了してしまうためです。
main関数が終了するとプログラムは終了してしまうので、subの中身が実行される前にプログラムが終了してしまいます。結果「sub done」が出力されません。

そのため、以下のようにsubが実行されるようにmainを遅延してあげる必要があります。

package main

import (
  "fmt"
  "time"
)

func sub() {
  fmt.Println("sub done")
}

func main() {
  go sub()
  fmt.Println("main done")
  time.Sleep(1 * time.Second)
}

// 実行時の出力
// main done
// sub done
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0