2つのルーチン関数があります.1つはデータを作成し、もう1つはデータをデータベースに追加します。データの作成が終了したら、データの追加を終了したいが、関数を何回呼び出すのか分からない。すべてのゴルーチンが終了したときにプログラムを終了する
for {
select {
case c <- dataChan:
go func() {
if data == false {
return // keeps the program running but never exits
}
createData(c.Data) // sends data to dataChan until data == false
}
go func() {
addData(c.Data) // need to keep the program running until all these goroutines finish
}
}
}
createData()
が作成され、dataChan
にデータを送信し、それが最終的に何度も何度も返すことによって開放状態に保持されるようにfalse
にdata
を設定し、プログラムの原因になりますいくつかの変数に基づいており、より多くのデータを作成停止しますが、私は感じますすべてのaddData()
のgoroutinesが終了したら私が終了することを可能にするよりクリーンな方法があるはずです。私は人々がこれにチャネルを使用しているのを見ましたが、関数を呼び出す回数を正確にはわかりません。
UPDATE:WORKING CODE
var wg sync.WaitGroup
for {
select {
case c <- dataChan:
wg.Add(1)
go func() {
if data == false {
wg.Wait()
os.Exit(0)
}
createData(c.Data)
}
go func() {
addData(c.Data)
defer wg.Done()
}
}
}