哪怕是抄,也要每天坚持打卡
个人学习笔记
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,然后输出超时和程序结束
本文来自博客园,作者:蹇爱黄,转载请注明原文链接:https://www.cnblogs.com/jianjiana/p/16931024.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?