golang如何結束goroutine

spider發表於2017-07-26

下面的程式碼開啟了10個消費者,消費者接收某訊息停止所有 goroutine 怎麼實現?

package main

import (

    "sync"
    "fmt"
    "strconv"
    "time"
    //"runtime"
)

var wait sync.WaitGroup

var input = make(chan string)


func inputConsumer() {


    for in := range input {


        fmt.Println(in)

        if in=="5" {

            //這裡結束所有goroutines

        }
        //println(runtime.NumGoroutine(),"===")

        time.Sleep(time.Second)

        wait.Done()
    }
}

var inputGroup sync.WaitGroup

func main() {

    //控制goroutine數量為10個
    for i := 0; i <10; i++ {
        go inputConsumer()
    }

    inputGroup.Add(1)

    go func(){
        for j:=1 ;j<20;j++ {
            wait.Add(1)
            input <- strconv.Itoa(j)
        }

        inputGroup.Done()

    }()

    inputGroup.Wait()

    wait.Wait()

}

更多原創文章乾貨分享,請關注公眾號
  • golang如何結束goroutine
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章