【go channel管道】

1.channel是什么
在Go语言中,Channel是一种用于在Goroutine之间进行通信的数据结构。它类似于队列,可以在一个Goroutine中将数据发送到Channel,然后在另一个Goroutine中接收这些数据。Channel提供了一种同步的方式,确保发送和接收操作按顺序进行,从而避免了并发访问共享数据的问题。

2.创建channel管道,并初始化
var 变量 chan 元素类型
变量 = make(chan 元素类型,缓冲区大小)
例如:
初始化一个可以接收、发送int值类型的通道,缓冲区为0

c**加粗样式**h := make(chan int)

初始化一个可以接收、发送int值类型的通道,可缓冲1个int值。第2个int值向通道中发送时会被阻塞。被缓冲的元素值,会严格按发送的顺序接收。

ch := make(chan int,1)

注意定义channel管道类型的方向
chan 类型 双向
chan<- 类型 只发送
<-chan 类型 只接收
3.channel操作
通道有发送(send)、接收(receive)和关闭(close)三种操作。
发送
将一个值发送到通道中。

ch <- 数据

接收
从一个通道中接收值。

<- channel			//从channel中接收数据并将其丢弃
x := <- channel		//从channel中接收数据,将其赋值给x
x, ok := channel	//从channel中接收数据,将其赋值给x,同时检查通道是否已关闭或者是否为空

关闭

close(ch)

4.channel使用
双向通道ch chan int


func main() {ch := make(chan int)go One(ch)result := <-chfmt.Println(result)
}
//双向通道 可以接收也可以发送
func One(ch chan int) {ch <- 42
}

单向通道,只能发送ch chan<- int

func main() {ch := make(chan int)go One(ch)result := <-chfmt.Println(result)
}
//单向通道,只能发送
func One(ch chan<- int) {ch <- 42}

单向通道,只能接收ch <-chan int

func main() {ch := make(chan int)go One(ch)ch <- 42
}
//单向通道,只能接收
func One(ch <-chan int) {result := <-chfmt.Println(result)}

5.go gin框架接口使用channel异步执行

//下方响应不会等one函数执行完毕
func test(context *gin.Context) {msg, _ := ioutil.ReadAll(context.Request.Body)log.Println(string(msg))var info map[string]interface{}json.Unmarshal(msg, &info)ch := make(chan map[string]interface{},1)go One(ch)ch <- infoclose(ch)context.String(200,"返回")}func One(ch <-chan map[string]interface{}) {time.Sleep(5 * time.Second)info := <-chlog.Println("11接受到info",info)}//该接口等one函数执行完毕后在返回响应
func test1(context *gin.Context) {msg, _ := ioutil.ReadAll(context.Request.Body)log.Println(string(msg))var info map[string]interface{}json.Unmarshal(msg, &info)ch := make(chan map[string]interface{})go One1(ch)ch <- infoclose(ch)context.String(200,"返回")}func One1(ch <-chan map[string]interface{}) {time.Sleep(5 * time.Second)info := <-chlog.Println("11接受到info",info)}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出Django的MTV架构

在现代Web应用程序开发中&#xff0c;采用一种模式或架构以组织代码和功能是至关重要的。在Django中&#xff0c;这种模式被称为MTV模式&#xff0c;即模型&#xff08;Model&#xff09;、模板&#xff08;Template&#xff09;和视图&#xff08;View&#xff09;。尽管它与传…

若依笔记(三):权限控制与数据隔离

目录 数据隔离/权限控制 用户/权限/部门/岗位 ​数据隔离 mybatis的maaper写法 注解和切面 前端路由拦截 已知若依单体的前端采用vue-element-admin&#xff0c;在前端的专栏系列vue-element-admin的动态路由已详细拆解&#xff0c;其最大特点是使用后端返回数据控制前端…

工业级环网交换机如何使用

工业级环网交换机是用于工业环境中的网络通信设备&#xff0c;具有高可靠性、耐用性和适应恶劣环境的特点。下面是一般的使用步骤&#xff1a; 1. 确保交换机的电源供应稳定并连接好电源线。 2. 将需要连接的网络设备&#xff08;如计算机、服务器、传感器等&#xff09;通过以…

ssh远程登录服务

目录 1.1版本协商阶段 1.2密钥和算法协商阶段 1.3认证阶段(两种认证方法): 2.1.安装ssh 2.2.配置文件分析: 3.1配置ssh监听端口号 3.2拒绝以root身份登录服务器 3.3虚拟机之间实现免密登录 3.4xshell免密登录 SSH (Secure Shell Protocol,安全壳程序协议)由IETF的网络…

模电学习路径

交流通路实质 列出电路方程1&#xff0c;方程1对时刻t做微分 所得方程1‘ 即为 交流通路 方程1对时刻t做微分&#xff1a;两个不同时刻的方程1相减&#xff0c;并 令两时刻差为 无穷小 微分 改成 差 模电学习路径&#xff1a; 理论 《电路原理》清华大学 于歆杰 朱桂萍 陆文…

透析远程办公效率低下的原因,这些问题有解决方法

远程办公是近年来越来越受欢迎的一种工作方式&#xff0c;许多人喜欢在家中或咖啡馆里工作&#xff0c;享受更自由的工作时间和空间。然而&#xff0c;远程办公也经常面临效率低下的问题&#xff0c;因为一些原因导致在办公室时高效率的工作方式在远程工作上不再适用。 首先&a…

【向生活低头】win7打印机共享给win11使用,win11无法连接问题的解决

打印机是跟win7的电脑连接的&#xff0c;然后试了很多方法&#xff0c;win11都没法添加该打印机去使用。 网上的方法乱七八糟啥都有&#xff0c;但试了以后&#xff0c;发现基本没什么用。 刚刚发现知乎上的一个回答是有用的&#xff0c;这里做记录以备后用。 1.打开控制面板的…

Linux 调试 (objdump/strace/strings)

目录 1. Linux 调试 (objdump/strace/strings)1.1. 查看系统 glibc 版本号1.2. 查看 so/bin 中的依赖1.3. 调试 bin 报错原因1.4. 查看 so/bin 中字符串 1. Linux 调试 (objdump/strace/strings) 1.1. 查看系统 glibc 版本号 1. 第一种 # ldd --version ldd (Ubuntu GLIBC 2.…

修复国产电脑麒麟系统开机出现initramfs 问题

目录预览 一、问题描述二、原因分析三、解决方案四、知识点呀initramfsBusyBox 五、参考链接 一、问题描述 国产麒麟系统出现 initramfs 模式 二、原因分析 一般在拷贝卡顿过程【强制关机】或者电【脑异常断电】的情况下概率性导致系统分区损坏&#xff0c;重启后大概率就会进…

数字孪生技术:金融业合规与自动化的未来

在当今数字化时代&#xff0c;金融行业正积极探索数字孪生技术&#xff0c;以实现更高效的运营和更好的客户体验。数字孪生是一种将实体世界的对象、过程和系统数字化为虚拟模型的技术&#xff0c;金融机构正在充分利用它带来的众多优势。 1. 风险管理与模拟 数字孪生模型可用…

解决ECharts柱形图自定义单个柱子颜色图例无法显示

legend里data和series里的name需要对应series里对象需要设置stack属性&#xff0c;属性值都一样即可显示单柱重点在于series里对象data属性设置&#xff0c;必须使用&#xff0c;否则影响柱体上数值显示tooltip的值需要自定义&#xff0c;否则会显示堆叠柱状图的tooltip格式&am…

Linux解决nvcc -V出现的-bash: nvcc command not found问题

两种解决办法&#xff1a; 1、第一种直接在bashrc文件中添加本地cuda路径&#xff1a; vim ~/.bashrc 定位到内容末尾&#xff0c;最末尾 添加命令&#xff1a; export LD_LIBRARY_PATH/usr/local/cuda/lib export PATH$PATH:/usr/local/cuda/bin添加后激活 source ~/.bashrc…

Ubuntu:解决PyCharm中不能输入中文或者输入一个中文解决方法

1.问题&#xff1a; Ubuntu22.04中&#xff0c;在pycharm里打字输入中文&#xff0c;每次都是只能输入第一个中文&#xff0c;后面输入的都变成了英文字母。。。无论咋调输入法&#xff0c;都没用&#xff0c;反正除了第一个字其他的输进去都是英文&#xff0c;而且汉字下面还…

软考 系统架构设计师系列知识点之设计模式(12)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之设计模式&#xff08;11&#xff09; 所属章节&#xff1a; 老版&#xff08;第一版&#xff09;教材 第7章. 设计模式 第2节. 设计模式实例 11. 某公司开发一个文档编辑器&#xff0c;改变及其允许在文档中直接嵌入…

2023年【R1快开门式压力容器操作】试题及解析及R1快开门式压力容器操作模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【R1快开门式压力容器操作】试题及解析及R1快开门式压力容器操作模拟试题&#xff0c;包含R1快开门式压力容器操作试题及解析答案和解析及R1快开门式压力容器操作模拟试题练习。安全生产模拟考试一点通结合国家…

Java 线程池规范

目录 1、为什么要使用线程池&#xff1f;2、线程池如何命名3、不要使用 Executors 下自带线程池4、Async 正确用法5、项目中可以定义多个线程池吗&#xff1f; 1、为什么要使用线程池&#xff1f; 在使用多线程时&#xff0c;频繁地创建和销毁线程会带来显著的性能开销。使用线…

论文 辅助笔记:t2vec train.py

1 train 1.1 加载training和validation数据 def train(args):logging.basicConfig(filenameos.path.join(args.data, "training.log"), levellogging.INFO)设置了日志的基本配置。将日志信息保存到名为 "training.log" 的文件中日志的级别被设置为 INFO&…

iZotope Ozone 11 Advanced for mac(臭氧11)11.0.0激活版

iZotope Ozone 11是一款功能丰富的母带处理工具&#xff0c;也是混音师和母带工程师工作中必备的工具之一。它能够满足母带的全部流程&#xff0c;包括均衡器&#xff08;EQ&#xff09;、压缩器&#xff08;Comp&#xff09;、限制器&#xff08;Limiter&#xff09;、多段宽度…

DQN强化学习

算是自己写的第一个强化学习环境&#xff0c;目前还有很多纰漏&#xff0c;逐步改进ing。 希望能在两周内施工完成。 import numpy as np import torch import torch.nn as nn import torch.optim as optim import random from collections import deque import matplotlib.pyp…

[100天算法】-二叉树剪枝(day 48)

题目描述 给定二叉树根结点 root &#xff0c;此外树的每个结点的值要么是 0&#xff0c;要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身&#xff0c;以及所有 X 的后代。)示例1: 输入: [1,null,0,0,1] 输出: [1,null,0,null,1]示例2: 输入: […