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




相关文章
|
2月前
|
Go
Go 1.22 for 循环的两处重要更新
本文介绍了 Go 1.22 版本对 for 循环所做的两处重要更新:循环的每次迭代都会创建新变量 和 循环支持对整数范围进行迭代。 - 循环的每次迭代都会创建新变量,有效避免了以往版本中常见的闭包陷阱,提高了代码的安全性和可预测性。 - 循环支持对整数范围进行迭代,极大地增强了 for 循环的灵活性,使得编写计数循环更加直接和简洁。
55 1
Go 1.22 for 循环的两处重要更新
|
4月前
|
JSON JavaScript Go
Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档
465 2
|
6月前
|
安全 Go 索引
Go切片循环就用range 有这一篇就够了
Go切片循环就用range 有这一篇就够了
102 0
|
1天前
|
程序员 Go
Golang深入浅出之-Select语句在Go并发编程中的应用
【4月更文挑战第23天】Go语言中的`select`语句是并发编程的关键,用于协调多个通道的读写。它会阻塞直到某个通道操作可行,执行对应的代码块。常见问题包括忘记初始化通道、死锁和忽视`default`分支。要解决这些问题,需确保通道初始化、避免死锁并添加`default`分支以处理无数据可用的情况。理解并妥善处理这些问题能帮助编写更高效、健壮的并发程序。结合使用`context.Context`和定时器等工具,可提升`select`的灵活性和可控性。
10 2
|
3天前
|
Go 开发者
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
【4月更文挑战第21天】本文介绍了Go语言中的流程控制语句,包括`if`、`switch`和`for`循环。`if`语句支持简洁的语法和初始化语句,但需注意比较运算符的使用。`switch`语句提供多分支匹配,可省略`break`,同时支持不带表达式的形式。`for`循环有多种形式,如基本循环和`for-range`遍历,遍历时修改原集合可能导致未定义行为。理解并避免易错点能提高代码质量和稳定性。通过实践代码示例,可以更好地掌握Go语言的流程控制。
11 3
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
|
4天前
|
程序员 Go API
【Go语言快速上手(二)】 分支与循环&函数讲解
【Go语言快速上手(二)】 分支与循环&函数讲解
|
2月前
|
Go 开发者 索引
Go语言中的循环控制结构解析
【2月更文挑战第3天】本文将详细探讨Go语言中的循环控制结构,包括`for`循环、`range`循环以及`无限循环`的使用方法和适用场景。通过掌握这些循环结构,Go语言开发者能够更加高效地进行迭代操作、处理集合数据以及实现复杂的控制逻辑。
|
3月前
|
Go
Go并发编程:玩转select语句
Go并发编程:玩转select语句
29 0
Go并发编程:玩转select语句
|
3月前
|
编译器 Go
go语言第二章循环结构(for循环)
go语言第二章循环结构(for循环)
27 0
|
4月前
|
存储 Go 索引
Go 语言中 For 循环:语法、使用方法和实例教程
for循环用于多次执行特定的代码块,每次都可以使用不同的值。每次循环执行都称为一次迭代。for循环可以包含最多三个语句: 语法
46 0