哪怕是抄,也要每天坚持打卡

个人学习笔记
go select

package main

import (
	"fmt"
	"time"
)

//在一个select语句中,Go语言会按顺序从头至尾评估每一个发送接受的语句。
//如果其中任意一句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句中任意选择一条来执行
//如果没有一条语句可以执行(即所有通道都被阻塞),那么有如下来中可能的情况:
//1,如果给出了default语句,那么就会执行default语句,同时程序的执行会从select语句后的语句中回复
//2.如果没有defalut语句,那么select语句将被阻塞,直到至少有一个通信可以进行下去

func main() {
	ch := make(chan int)
	quit := make(chan bool)
	//新开一个协程,一直监听管道中的值
         go func() {
		for {
			select {
			case num := <-ch:
				fmt.Printf("num = %d\n", num)

			case <-time.After(time.Second * 10):
				fmt.Println("超时")
				quit <- true
			}
		}
	}()

	for i := 0; i < 5; i++ {
		ch <- i
		time.Sleep(time.Second)
	}

	
	//取出quit管道中的值
	<-quit
	fmt.Println("程序结束")
}

当for循环结束的时候会执行下一个case,等待10s,然后输出超时和程序结束

posted @   蹇爱黄  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示