您现在的位置是:网站首页> 编程资料编程资料
go语言编程之select信道处理示例详解_Golang_
2023-05-26
346人已围观
简介 go语言编程之select信道处理示例详解_Golang_
select信道处理
注意:有default就不会阻塞
package main func main() { var chan1 = make(chan int) var chan2 = make(chan int) select { case <-chan1: // 如果chan1成功读到数据,则进行该case处理语句 case chan2: // 如果chan2成功读到数据,则进行该case处理语句 default: // 如果上面都没有成功,则进行该case处理语句 } } fibonacci数列监听
//fibonacci 1 1 2 3 5 8 package main import ( "fmt" ) //ch只写,quit只读 func fibonacci(ch chan<- int, quit <-chan bool) { x, y := 1, 1 for { //监听channel数据的流动 select { case ch <- x: x, y = y, x+y case flag := <-quit: fmt.Println("flag = ", flag) return } } } func main() { ch := make(chan int) //数字通信 quit := make(chan bool) //程序是否结束 //消费者,从channel读取内容 //新建协程 go func() { for i := 0; i < 8; i++ { num := <-ch fmt.Println(num) } //可以停止 quit <- true }() //别忘了() //生产者,产生数字,写入channel fibonacci(ch, quit) } 1 1 2 3 5 8 13 21 flag = true select监听协程
func main() { //创建一个有缓存的channel ch := make(chan int, 0) //len(ch)缓冲区剩余数据个数, cap(ch)缓冲区大小 //新建协程 go func() { for i := 0; i < 10; i++ { ch <- i //往chan写内容 } }() ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) go func(ctx context.Context) { ticker := time.NewTicker(1 * time.Second) for _ = range ticker.C { select { case <-ctx.Done(): fmt.Println("child process interrupt...") return default: fmt.Printf("send message: %d\n", <-ch) } } }(ctx) defer close(ch) defer cancel() select { case <-ctx.Done(): time.Sleep(1 * time.Second) fmt.Println("main process exit!") } }以上就是go语言编程之select信道处理示例详解的详细内容,更多关于go语言select信道处理 的资料请关注其它相关文章!
您可能感兴趣的文章:
相关内容
- Go语言学习之运算符使用详解_Golang_
- golang下grpc框架的使用编写示例_Golang_
- go实现grpc四种数据流模式_Golang_
- Go依赖注入DI工具wire使用详解(golang常用库包)_Golang_
- 详解Go语言中的数据类型及类型转换_Golang_
- GO语言中常见的排序算法使用示例_Golang_
- golang的协程上下文的具体使用_Golang_
- Go1.18 新特性之多模块Multi-Module工作区模式_Golang_
- golang实现简单工厂、方法工厂、抽象工厂三种设计模式_Golang_
- Golang原生rpc(rpc服务端源码解读)_Golang_
