golang context.WithTimeout 超时处理

2023-05-16

<span style="font-size:18px;color:#3333ff;">package main

import (
    "golang.org/x/net/context"
    "log"
    "math/rand"
    "time"
)

func test(is_first *bool, prev_map *map[string]string) {
    rand.Seed(int64(time.Now().Nanosecond()))
    ch := make(chan bool)
    ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond)

    go func() {
        if *is_first {
            (*prev_map)["a"] = "1"
        } else {
            (*prev_map)["a"] = "2"
        }
        time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
        ch <- true
    }()

    select {
    case <-ch:
        *is_first = false
        (*prev_map)["b"] = "fast"
        return
    case <-ctx.Done():
        *is_first = true
        (*prev_map)["b"] = "slow"
        return
    }
}

func main() {
    is_first := true
    prev_map := make(map[string]string)
    for {
        test(&is_first, &prev_map)
        time.Sleep(time.Second)
        log.Println(prev_map, is_first)
    }
}</span>



<span style="font-size:18px;color:#3333ff;">[work@localhost test]$ go run main.go 
2016/08/18 23:22:26 map[a:1 b:fast] false
2016/08/18 23:22:27 map[a:2 b:slow] true
2016/08/18 23:22:28 map[a:1 b:slow] true
2016/08/18 23:22:29 map[a:1 b:fast] false
2016/08/18 23:22:30 map[b:fast a:2] false
2016/08/18 23:22:31 map[b:slow a:2] true
2016/08/18 23:22:32 map[a:1 b:fast] false
2016/08/18 23:22:33 map[a:2 b:slow] true
2016/08/18 23:22:34 map[a:1 b:slow] true
2016/08/18 23:22:35 map[a:1 b:slow] true
2016/08/18 23:22:36 map[a:1 b:slow] true
^Csignal: interrupt</span>

不要企图终止goroutine,在select 中用方法包装管道来实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

golang context.WithTimeout 超时处理 的相关文章

  • Go内存管理及性能观测工具

    内存管理 TCMalloc Golang内存分配算法主要源自Google的TCMalloc算法 TCMalloc将内存分成三层最外层Thread Cache 中间层Central Cache 最里层Page Heap Thread Cach
  • golang-bufio 缓冲扫描

    前面两篇博客 介绍了 bufio 包中的缓冲读和写 bufio go 下面再来介绍一下缓冲扫描 scan go 这个扫描的是用来对缓存读的更高级封装 提供了一些更易用的方法 缓冲扫描 Scanner 提供了一个方便的接口来读取数据 例如使用
  • Golang教程:(十六)结构体

    原文 https golangbot com structs 欢迎来到Golang系列教程的第十六篇 什么是结构体 结构体 struct 是用户自定义的类型 它代表若干字段的集合 有些时候将多个数据看做一个整体要比单独使用这些数据更有意义
  • go-zero使用Etcd进行服务注册代码分析

    代码分析 github com tal tech go zero v1 2 3 core discov publisher go package discov import github com tal tech go zero core
  • 带你使用Golang快速构建出命令行应用程序

    在日常开发中 大家对命令行工具 CLI 想必特别熟悉了 如果说你不知道命令工具 那你可能是个假开发 每天都会使用大量的命令行工具 例如最常用的Git Go Docker等 不管是做技术开发还是业务开发 都会有开发命令行程序的场景 例如如果是
  • Jenkins系列:3、wsl/ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序

    Jenkins系列 3 wsl ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序 文章目录 Jenkins系列 3 wsl ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序 1 前言 2 wsl
  • Go切片排序

    Go 语言标准库提供了sort包 用于对切片和用户定义的集合进行排序 具体示例如下 基本排序 package main import fmt sort func main float 从小到大排序 f float64 5 2 1 3 0 7
  • Golang连接Jenkins获取Job Build状态及相关信息

    文章目录 1 连接Jenkins 2 controller 3 module 4 router 5 效果展示 第三方包 gojenkins 方法文档 gojenkins docs 实现起来很简单 利用第三方库 连接jenkins 调用相关方
  • beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署”

    写在前面的话 1 为什么我要叫伪部署 答 因为我把它们放在服务器运行 都是开发模式 生产模式实在不会弄 所以就这样了 2 系统环境 答 腾讯云服务器 系统为 ubuntu 版本不记得 应该是比较高的 3 前提假设 答 假设你的服务器已经安装
  • Go中 Redis Client的使用

    文章目录 常见操作 List 操作 Pipeline 使用 在 Go 语言中使用 Redis 时 可以使用第三方库实现 Redis Client 的封装 本文介绍如何使用 Go 语言的 redisClient 去连接 Redis 服务器 并
  • Go 语言注释教程

    注释是在执行时被忽略的文本 注释可用于解释代码 使其更易读 注释还可用于在测试替代代码时防止代码执行 Go支持单行或多行注释 Go单行注释 单行注释以两个正斜杠 开头 在 和行尾之间的任何文本都将被编译器忽略 不会被执行 示例 This i
  • 48.Go简要实现令牌桶限流与熔断器并集成到Gin框架中

    文章目录 一 简介 二 限流器与熔断器在微服务中的作用 1 限流器 对某个接口单位时间内的访问量做限制 2 熔断器 当服务连续报错 超过一定阈值时 打开熔断器使得服务不可用 三 具体实现 1 限流器实现逻辑 以令牌桶算法为例 2 限流器集成
  • 【go语言开发】loglus日志框架的使用

    本文将简单介绍loglus框架的基本使用 并给出demo 文章目录 前言 Loglus常见用法 自定义日志级别 使用字段钩子 输出到多个位置 使用钩子实现自定义日志处理 demo
  • go-zero目录结构和说明

    code of conduct md 行为准则 CONTRIBUTING md 贡献指南 core 框架的核心组件 bloom 布隆过滤器 用于检测一个元素是否在一个集合中 breaker 熔断器 用于防止过多的请求导致系统崩溃 cmdli
  • go-zero开发入门之网关往rpc服务传递数据1

    go zero 的网关往 rpc 服务传递数据时 可以使用 headers 但需要注意前缀规则 否则会发现数据传递不过去 或者对方取不到数据 go zero 的网关对服务的调用使用了第三方库 grpcurl 入口函数为 InvokeRPC
  • GoLong的学习之路,进阶,Viper(yaml等配置文件的管理)

    本来有今天是继续接着上一章写微服务的 但是这几天有朋友说 再写Web框架的时候 遇到一个问题 就是很多的中间件 redis 微信 mysql mq 的配置信息写的太杂了 很不好管理 希望我能写一篇有管理配置文件的 所以这篇就放到今天写吧 微
  • 【go语言】error错误机制及自定义错误返回类型

    简介 Go 语言通过内置的 error 接口来处理错误 该接口定义如下 type error interface Error string 这意味着任何实现了 Error 方法的类型都可以作为错误类型 在 Go 中 通常使用 errors
  • go开发--操作mysql数据库

    在 Go 中访问 MySQL 数据库并进行读写操作通常需要使用第三方的 MySQL 驱动 Go 中常用的 MySQL 驱动有 github com go sql driver mysql 和 github com go xorm xorm
  • 这套Go语言开发框架组合真的非常高效

    我尝试过很多框架 从Django Flask和Laravel到NextJS和SvelteKit 到目前为止 这是我唯一可以使用的不会让我感到疯狂或者放弃项目的堆栈 框架 我喜欢所有这些框架 但我只是不太适应它们的设计方式 实际上 我是一个弱
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github

随机推荐

  • C语言冒泡排序

    1 基本原理 冒泡排序指的是在排序时 xff0c 每次比较数组中相邻的两个数组元素的值 xff0c 较小的数 xff08 从小到大排列 xff09 排在较大的数前面 排序的基本思想 两两相邻的元素进行比较 xff0c 并且可能的话需要进行交
  • dell optiplex ubuntu 14.04 安装 NVIDIA 显卡驱动

    公司配置的 dell optiplex使用核显带起双屏幕 xff0c 玩dota2无法特效全开 so xff0c 在京东上买了一块750Ti 安装驱动的时候需要切换到ubuntu的全命令行模式 xff0c 关掉桌面系统才能安装 这时候这个坑
  • golang tcp 2 unix socket proxy

    想将mysql 的TCP 封死 xff0c 所有外部链接由我的proxy来控制 xff0c so 写了一个 tcp 转 unix socket 的 proxy package main import 34 os 34 34 fmt 34 3
  • backup mysql for xtrabackup with xbstream and lz4

    需要临时为mysql添加一个实例 xff0c 使用xtrabackup最简单快速 在现有数据节点上 xff1a home work app xtrabackup 2 2 3 innobackupex ibbackup 61 home wor
  • MySQL分组排序取前N条记录以及生成自动数字序列--group by 后 limit 外加 rownumber

    同事提了一个需求 xff0c 要求按照某列分组 xff0c 然后将各组的前几条抽取出来 表结构 CREATE TABLE 96 total freq ctrl 96 96 time 96 int 10 unsigned NOT NULL 9
  • docker init 起步

    yum install wget http fedora mirror nexicom net epel 6 x86 64 epel release 6 8 noarch rpm yum y install epel release 6 8
  • 设置xrdp使用固定的会话

    修改xrdp ini配置文件 xff0c 位于 etc xrdp xrdp ini 要打开和编辑xrdp的配置文件 xff0c 请使用 xff1a sudo nano etc xrdp xrdp ini 默认情况下 xff0c 第一个xrd
  • 回想当年 91d2 1588 神戒

    渡鳥之箍 全JP属性 xff0c 1588成交
  • mysql 事务 rollback 失效

    最近支付业务发生了一件怪事 xff0c 在一个事务 失败后 xff0c 调用rollback xff0c 发现只rollback 了最后一条sql 开发查了很久 xff0c 发现是网络抖动 xff0c 造成第一次创建链接的 begin 丢掉
  • 旅游

    每次出游 我们自己看来 别人看来 实际上
  • 使用cgroup 限制进程的磁盘io

    cat etc cgconfig conf Copyright IBM Corporation 2007 Authors Balbir Singh lt balbir 64 linux vnet ibm com gt This progra
  • mac ox ssd 开启 trim

    使用clover 补丁开启
  • aerospike参考资料

    本文转自 xff1a http blog csdn net songhuiqiao article details 50324073 aerospike QQ群 xff1a 419183757 http blog csdn net jias
  • aerospike init

    本文转自 xff1a http blog csdn net songhuiqiao article details 50324109 aerospike QQ群 xff1a 419183757 aerospike init 1 aerosp
  • 文章标题

    本文转自 xff1a http blog csdn net songhuiqiao article details 50324139 aerospike QQ群 xff1a 419183757 Distribution 分布 Aerospi
  • 源码编译aerospike-server-3.6.4

    生产环境一直使用3 5 3这个版本 xff0c 和开发商量了一下 xff0c 在测试环境使用3 6 4搭建集群 xff0c 如果运行稳定就找机会将生产环境的集群升级 aerospike QQ群 xff1a 419183757 从github
  • 暗黑破坏神 2 私服 sf 114.215.178.67

    注册表 REGEDIT4 HKEY CURRENT USER Software Blizzard Entertainment Diablo II 34 BNETIP 34 61 34 114 215 178 67 34 1 11b 原版 Q
  • Linux下NVIDIA驱动手动安装

    1 查看当前电脑的显卡型号 lshw numeric C display 执行完毕后我的显卡型号为 GTX 960M xff1a 2 下载NVIDIA官方驱动 到NVIDIA的官方驱动网站下载对应显卡的驱动程序 xff0c 下载后的文件格式
  • mysql checksum table golang

    package main import 34 bytes 34 34 database sql 34 34 fmt 34 34 github com go sql driver mysql 34 34 io ioutil 34 34 reg
  • golang context.WithTimeout 超时处理

    lt span style 61 34 font size 18px color 3333ff 34 gt package main import 34 golang org x net context 34 34 log 34 34 ma