go如何跳出for select循环?

lan6193.blog.csdn.net

方式1:关闭通道并检测,设置标签进行break

loop:
	for {
		select {
		case data, ok := <-appsCh:
			if !ok {
				logrus.Info("已关闭。。")
				break loop
			}
			resList = append(resList, data)
			dataCount ++
		case e := <-errCh:
			err = e
			errCount++
		}
		if (dataCount + errCount) == projectCount {
			//满足特定条件时关闭通道,终止接收
			close(appsCh)
		}
	}

直接break只能退出一般的for循环,不能退出for-select。此处标签也可用goto,跳转到for外面指定的代码行。

方式2:设置bool类型标志位

    isComplete := false
	var err error
	var resList []model.StateStatistic
	for !isComplete {
		select {
		case data := <-appsCh:
			resList = append(resList, data)
			dataCount ++
		case e := <-errCh:
			err = e
			errCount ++
		}
 
		if (dataCount + errCount) == projectCount {
			//满足条件时关闭channel,设置标志位为true从而跳出循环
                        close(appsCh)
			isComplete = true
		}
	}

如果解决了你的问题,可以点个赞哦! 有缘再会.

 

 

会当凌绝顶,一览众山小。

你可能感兴趣的:(#,go)