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