可以使用通道来实现定时或根据条件结束循环,并执行后续代码。具体实现方式如下:

  1. 定义一个通道 done,用于控制循环的结束。

  2. 在循环中,通过 select 语句监听 done 通道和定时器通道 time.After,如果其中任意一个通道被触发,则退出循环。

  3. 如果循环是因为定时器触发而退出的,则执行定时器后续的代码;如果是因为 done 通道被触发而退出的,则执行 done 后续的代码。

下面是一个示例代码:

package main

import (
	"fmt"
	"time"
)

func main() {
	done := make(chan bool)

	go func() {
		time.Sleep(3 * time.Second)
		done <- true
	}()

	for {
		select {
		case <-done:
			fmt.Println('done')
			// 执行后续代码
			return
		case <-time.After(5 * time.Second):
			fmt.Println('timeout')
			// 执行后续代码
			return
		default:
			// 循环体代码
			fmt.Println('working')
			time.Sleep(1 * time.Second)
		}
	}
}

在上面的示例中,循环体代码会每隔一秒钟输出一次'working',同时通过 default 分支保证 select 语句不会阻塞。当定时器触发或 done 通道被写入时,select 语句会立即退出循环,并根据触发通道的不同执行不同的后续代码。

Go 语言使用通道控制循环结束并执行后续代码

原文地址: https://www.cveoy.top/t/topic/lrWM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录