Go 例程、通道和无限循环

Go 例程、通道和无限循环,go,Go,我正在尝试从频道获取信息,但看起来我的代码在go routinnes之后没有运行。 我的两个例程都在工作,第一个例程收集信息,最后一个例程监视填充,如果填充结束,第二个例程将停止这两个例程 如何在例程之后获取信息和运行代码?或者也许有什么正确的方法来获取信息 func main() { watcher, _ := winlog.NewWinLogWatcher() watcher.SubscribeFromBeginning("Application", `*`) i :

我正在尝试从频道获取信息,但看起来我的代码在go routinnes之后没有运行。 我的两个例程都在工作,第一个例程收集信息,最后一个例程监视填充,如果填充结束,第二个例程将停止这两个例程 如何在例程之后获取信息和运行代码?或者也许有什么正确的方法来获取信息

func main() {
    watcher, _ := winlog.NewWinLogWatcher()
    watcher.SubscribeFromBeginning("Application", `*`)
    i := 0
    c := make(chan bool)
    go func() {
        for {
            if flag == true {
                return
            }
            select {
            case evt := <-watcher.Event():
                i+=1
                var event Event
                data := []byte(evt.Xml)
                _ = xml.Unmarshal(data, &event)
                Events = append(Events, event)
            case err := <-watcher.Error():
                break
            }
        }
    }()

    go func() {
        for {
            if flag == true {
                break
            }
            if I == 0 || I != i {
                I = i
            }
            time.Sleep(time.Millisecond * 100)
            if i == I && flag == false{
                flag = true
            }
            time.Sleep(time.Millisecond * 10)
        }
    }()
    <-c
    // *** i cant print this info ***
    time.Sleep(10*time.Millisecond)
    fmt.Println(`Events counter:`, len(Events))
}
func main(){
watcher,u:=winlog.NewWinLogWatcher()
watcher.subscribeFromStart(“应用程序”,`*`)
i:=0
c:=制造(陈布尔)
go func(){
为了{
如果标志==true{
回来
}
挑选{

案例evt:=从频道
读取没有人发送任何内容或关闭频道
c
,因此
是的,这个解决方案对我有效,@icza已经发送了它。我之前在《如何》中读到的内容显然不是为了我的问题。谢谢
wg := &sync.WaitGroup{}
wg.Add(1)
go func () {
    defer wg.Done()
    ...
}
wg.Wait()