go 缓冲区循环 以及 select选择

简介: go 缓冲区循环 以及 select选择

只有当 chan 关闭的时候,for 循环才会结束

当使用 for range 循环缓冲区的时候, 当缓冲区中没有 数据时 也是不会结束的

chan开销很小,不需要像文件一样,经常关闭,只有不需要使用时才需要关闭

Select 使用

只有当 chan1 chan2 有被准备好的 通道才可以执行,否则的话就陷入阻塞

如果有多个channel 准备好了 ,那就随机选一个分支进行执行

for{
Select {
Case chan1 <-x:
- x,y=y,x+y
Case  <- chan2 :
- fmt.Println("quit")
- return
}
}


缓冲区过多时的等待方法

var  waitgroup sync.WaitGroup
For i :=0 ; i<10 ;i++{
waitgroup.add(1)
go func(){
- fmt.Println("hellow world")
-   waitgroup.Done()
}()
waitgroup.Wait()
}


通过select 来监听超时

func listen_time_out() {
    chan1 := make(chan int, 1)
    listen_time_out := make(chan bool)
    go func() {
        for {
            select {
            case v := <-chan1:
                println(v)
            case chan1 <- 2:
                // chan1 <- 2
            case <-time.After(5 * time.Second):
                listen_time_out <- true
                return
                // break
            }
        }
    }()
    <-listen_time_out
}
func main() {
    listen_time_out()
}

定时退出程序

    go func() {
        select {
        case <-time.After(3 * time.Second):
            listen_time_out <- true
            // os.Exit(0)
        }
    }()
<- listen_time_out




相关文章
|
6月前
|
Go
Go 1.22 for 循环的两处重要更新
本文介绍了 Go 1.22 版本对 for 循环所做的两处重要更新:循环的每次迭代都会创建新变量 和 循环支持对整数范围进行迭代。 - 循环的每次迭代都会创建新变量,有效避免了以往版本中常见的闭包陷阱,提高了代码的安全性和可预测性。 - 循环支持对整数范围进行迭代,极大地增强了 for 循环的灵活性,使得编写计数循环更加直接和简洁。
101 1
Go 1.22 for 循环的两处重要更新
|
6月前
|
供应链 Go
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
|
6月前
|
JSON JavaScript Go
Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档
934 2
|
6月前
|
程序员 Go
Golang深入浅出之-Select语句在Go并发编程中的应用
【4月更文挑战第23天】Go语言中的`select`语句是并发编程的关键,用于协调多个通道的读写。它会阻塞直到某个通道操作可行,执行对应的代码块。常见问题包括忘记初始化通道、死锁和忽视`default`分支。要解决这些问题,需确保通道初始化、避免死锁并添加`default`分支以处理无数据可用的情况。理解并妥善处理这些问题能帮助编写更高效、健壮的并发程序。结合使用`context.Context`和定时器等工具,可提升`select`的灵活性和可控性。
101 2
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
3月前
|
存储 编译器 Go
|
3月前
|
Go
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
|
4月前
|
Go
go select 使用总结
go select 使用总结
37 1
|
6月前
|
Go
Go 语言循环语句
Go 语言循环语句
33 0
|
5月前
|
Go
go之select
go之select