go语言编程之select信道处理示例详解
作者:Jeff的技术栈 发布时间:2024-04-26 17:16:14
标签:go语言,select,信道处理
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!")
}
}
来源:https://www.cnblogs.com/guyouyin123/p/13986339.html
0
投稿
猜你喜欢
- 1.安装时选择的自动安装,忘了用户名和密码导致现在试了几个Oracle默认用户名密码後(表格中附带默认用户名及密码),都提示无效的用户名、密
- /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver 'ITSV ',
- pytest-playwright 是一个 Python 包,它允许您使用 Microsoft 的 Playwright 库在 Python
- 1. 首先看要设置登陆的界面 book/view.py@user_util.my_login #相当于 select_all=my_logi
- 前言除了数字,Python中最常见的数据类型就是字符串,无论那种编程语言,字符串无处不在。例如,从用户哪里读取字符串,并将字符串打印到屏幕显
- 今天从网上学习了有关SQL注入的基本技能。SQL注入的重点就是构造SQL语句,只有灵活的运用SQL 语句才能构造出牛比的注入字符串。学完之后
- 一、上传表单的HTML代码 <form action="UpLoad.php" method="post
- CAPTCHA,全称为“Completely Automated Public Turing test to tell Computers
- 什么是EfficientNet模型2019年,谷歌新出EfficientNet,在其它网络的基础上,大幅度的缩小了参数的同时提高了预测准确度
- 在看子串匹配问题的时候,书上的关于KMP的算法的介绍总是理解不了。看了一遍代码总是很快的忘掉,后来决定好好分解一下KMP算法,算是给自己加深
- 一.CSRF简介CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站
- 在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL
- 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第四个自然段。以下叙述的脚本包括服务器端脚本和客户端的脚本,服务器端脚本指在服务器上
- 我用 ip=Request.ServerVariables
- python 包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍几种常用情况: (1)主
- 问:如何让内联框架里面的网页背景透明?(用iframe嵌套一网页,怎么能够设置其背景为透明以便能显示父框架中网页的背景图?)答:这是需要 I
- 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例:示例 1:输入: “abcabcbb”输出: 3解释: 因为无重
- 以前装过sql server,后来删掉。现在重装,却出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动
- 概述见源码源码# !/usr/bin/env python# -*- coding:utf-8 -*-"""图
- 这个是升级的版本,比较进阶一点的,相对与之前的文件管理系统,数据只是存储到了内存中,而不是存储到硬盘上,我们想让文件存储到硬盘上的话,一个是