当前位置: 首页 > news >正文

golang之context实用记录

简言

  1. WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel

  2. 新创建协程中传入子Context做参数,且需监控子Context的Done通道,若收到消息,则退出

  3. 需要新协程结束时,在外面调用 cancel 函数,即会往子Context的Done通道发送消息

  4. 注意:当 父Context的 Done() 关闭的时候,子 ctx 的 Done() 也会被关闭

实验步骤

  1. 利用根Context创建一个父Context,使用父Context创建一个协程,

  2. 利用上面的父Context再创建一个子Context,使用该子Context创建一个协程

  3. 一段时间后,调用父Context的cancel函数,会发现父Context的协程和子Context的协程都收到了信号,被结束了

package main
import ("context""fmt""log""os""time"
)
func ctxjob() {ctx := context.Background()subctx, c := context.WithCancel(ctx)action := func(sctx context.Context, id int) {for {select {case <-sctx.Done():fmt.Println("action done exit.", id)returndefault:fmt.Println("action running...", id)time.Sleep(1 * time.Second)}}}go action(subctx, 1)sub2ctx, _ := context.WithCancel(subctx)go action(sub2ctx, 2)time.Sleep(10 * time.Second)fmt.Println("stop action")c()time.Sleep(1 * time.Second)fmt.Println("stop action done.")}
func main() {// pullRedis()ctxjob()
}

输出:

PS E:\bug\go-leo-t> go build main.go
PS E:\bug\go-leo-t> .\main.exe      
action running... 2
action running... 1
action running... 1
action running... 2
action running... 1
action running... 2
action running... 2
action running... 1
action running... 1
action running... 2
action running... 2
action running... 1
action running... 2
action running... 1
action running... 1
action running... 2
action running... 2
action running... 1
action running... 1
action running... 2
stop action
action done exit. 2
action done exit. 1
stop action done.

相关文章:

golang之context实用记录

简言 WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel 新创建协程中传入子Context做参数&#xff0c;且需监控子Context的Done通道&#xff0c;若收到消息&#xff0c;则退出 需要新协程结束时&#xff0c;在外面调用 cancel 函数&#xff0c;即会往子C…...

音视频FFmpeg简单理解学习,必学技术

FFmpeg是一个开源的多媒体框架&#xff0c;它包含了一个用于音频和视频编解码的库。它可以执行各种多媒体操作&#xff0c;如格式转换、视频剪辑、音频处理等。可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 FFmpeg的结构 默认的编译会生成…...

一款内网信息收集利用工具

FuckDomainMini 简介 这是一款基于java开发Windows的内网信息收集、利用工具 可以节省您的信息收集所花费的&#xff0c;又或者是做免杀所花费的时间 现在这个版本是先行版本&#xff0c;目前先行版只有一个功能&#xff0c;更多的功能还在调试与开发中。 尽情期待&#x…...

数据库表的操作

目录 一、表的创建 1、创建语法 2、创建案例 二、查看表结构 三、修改表 1、修改表名 2、添加记录 3、修改列属性 4、添加列&#xff08;字段&#xff09; 5、删除列&#xff08;字段&#xff09; 6、修改列名字 四、删除表 五、修改表结构的风险 1、风险 2、建议 一、表的创建…...

Golang开发--channel的使用

在 Go 语言中&#xff0c;channel&#xff08;通道&#xff09;是一种用于在 goroutine 之间进行通信和同步的并发原语。它提供了一种安全且简单的方式来传递数据。 通道的详细描述和使用方法 1.定义通道&#xff1a; 通道是通过使用 make 函数来创建的。通道有特定的类型&am…...

SQL sever中表管理

目录 一、创建表&#xff1a; 1.1语法格式&#xff1a; 1.2示例&#xff1a; 二、修改表&#xff1a; 2.1语法格式&#xff1a; 2.2示例&#xff1a; 三、删除表&#xff1a; 3.1语法格式&#xff1a; 3.2示例&#xff1a; 四、查询表&#xff1a; 4.1语法格式&…...

CSSoverflow 属性

overflow 属性用于设置当元素中的内容溢出后的情况。 值得注意的是: 所谓溢出&#xff0c;是指子元素的大小&#xff08;包括文本、元素或图片等&#xff09;超出父元素的区域&#xff0c;会有一部分内容显示在父元素所在的区域外。 属性值描述visible默认值。内容不会被修剪&a…...

08:STM32----DMA数据转运

目录 1:简历 2:存储器映像 3:DMA基本结构 4: DMA转运的条件 5:DMA请求 A:DMA数据转运 1:连接图 2:数据转运DMA 3:函数介绍 4:步骤 5:代码 B:DMAAD多通道 1:连接图 2:结构图 3:函数介绍 4:代码 1:简历 DMA&#xff08;Direct Memory Access&#xff09;直接存储…...

Golang 程序漏洞检测利器 govulncheck(二):漏洞数据库详解

上一篇文章详细介绍了 Golang 程序漏洞扫描工具 govulncheck 的使用方法&#xff0c;govulncheck 强大功能的背后&#xff0c;离不开 Go 漏洞数据库&#xff08;Go vulnerability database&#xff09;的支持&#xff0c;接下来详细讲解下 Go 漏洞数据库相关的知识。 Go 漏洞数…...

[JDK8下的HashMap类应用及源码分析] 数据结构、哈希碰撞、链表变红黑树

系列文章目录 [Java基础] StringBuffer 和 StringBuilder 类应用及源码分析 [Java基础] 数组应用及源码分析 [Java基础] String&#xff0c;分析内存地址&#xff0c;源码 [JDK8环境下的HashMap类应用及源码分析] 第一篇 空构造函数初始化 [JDK8环境下的HashMap类应用及源码分…...

高等数学刷题

两个公式本质都是相同的 Π/2 1^∞类型...

lintcode 1840 · 矩阵还原【中等 vip 二维前缀和数组】

题目 https://www.lintcode.com/problem/1840 现有一个n行m列的矩阵 before&#xff0c;对于before里的每一个元素 before[i][j]&#xff0c;我们会使用以下算法将其转化为 after[i][j]。现给定after矩阵&#xff0c;请还原出原有的矩阵before。s 0 for i1: 0 -> ifor j1…...

VMware虚拟机+Centos7 配置静态,动态IP

本章目录 一、查看网关&#xff1a; 编辑–>虚拟网络编辑器二、点击NAT设置三、记住网关IP待会要用四、配置静态ip地址1、进入存放修改IP地址的目录2、修改ip地址的文件3、编辑文件4、文件&#xff08;编辑好后退出&#xff09; 五、重启网络六、测试1、linux上查看IP地址的…...

【C++精华铺】10.STL string模拟实现

1. 序言 STL&#xff08;标准模板库&#xff09;是一个C标准库&#xff0c;其中包括一些通用的算法、容器和函数对象。STL的容器是C STL库的重要组成部分&#xff0c;它们提供了一种方便的方式来管理同类型的对象。其中&#xff0c;STLstring是一种常用的字符串类型。 STLstrin…...

微信小程序开发---事件的绑定

目录 一、事件的概念 二、小程序中常用的事件 三、事件对象的属性列表 四、bindtap的语法格式 &#xff08;1&#xff09;绑定tap触摸事件 &#xff08;2&#xff09;编写处理函数 五、在事件处理函数中为data中的数据赋值 六、事件传参 七、bindinput的语法格式 八、…...

基于Hata模型的BPSK调制信号小区覆盖模拟matlab完整程序分享

基于Hata信道模型的BPSK调制信号小区覆盖模拟matlab仿真&#xff0c;对比VoIP, Live Video,FTP/Email 完整程序&#xff1a; clc; clear; close all; warning off; addpath(genpath(pwd)); % Random bits are generated here. bits randi([0, 1], [50,1]); M 2; t 1:1:50; …...

音视频 ffmpeg视频裁剪

将输入视频帧的宽度和高度从x和y值表示的位置裁剪到指定的宽度和高度;x和y是输出的左上角坐标&#xff0c;协调系统的中心是输入视频帧的左上角。 如果使用了可选的keep_aspect参数&#xff0c;将会改变输出SAR(样本宽比)以补偿新的DAR(显示长宽比) cropow[:oh[:x[:y[:keep_as…...

Web3数据云OORT推出商用版智能代理构建平台:OORT TDS

随着技术进步和数据隐私问题的日益凸显&#xff0c;生成式AI和去中心化技术联手为企业和个人开辟了全新的互动视野。站在这一趋势的前沿&#xff0c;OORT展现了其在去中心化数据云领域的技术实力&#xff0c;作为行业的领先者&#xff0c;今日Oort正式宣布OORT TDS (Talk-to-Da…...

ChatGPT:革命性的自然语言处理技术

自然语言处理&#xff08;NLP&#xff09;技术的快速发展已经为我们的日常生活带来了巨大的变革。在这个领域&#xff0c;ChatGPT作为一个突出的代表&#xff0c;正在为我们带来更多的便利和机会。本文将介绍ChatGPT的基本概念、应用领域以及它在未来可能带来的影响。 ChatGPT…...

利用frps搭建本地自签名https服务的透传

nginx的搭建就不介绍了&#xff0c;教程很多&#xff0c;基本上油手就会。 在本例中&#xff0c;frp服务器的域名是 www.yourfrp.com&#xff0c;同时也是反向代理nginx服务器; 本地网站要用的域名&#xff1a; test.abcd.com 请事先将 test.abcd.com 解析到 frp所在服务器…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...