首页 > 其他分享 >golang 如从一个通道(channel)接收数据时在预期时间没接收到,可以使用select语句和time.After函数,来防止一直没拿到数据导致协程一直阻塞

golang 如从一个通道(channel)接收数据时在预期时间没接收到,可以使用select语句和time.After函数,来防止一直没拿到数据导致协程一直阻塞

时间:2024-08-01 18:52:50浏览次数:14  
标签:接收数据 After golang ch time 超时 select

在Go语言中,如果希望在从一个通道(channel)接收数据时设置超时,可以使用select语句和time.After函数。以下是一个示例代码,演示了如何实现这个功能:

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    // 创建一个通道
    ch := make(chan string)
 
    // 启动一个goroutine,模拟数据生产,这里延迟1秒
    go func() {
        time.Sleep(1 * time.Second)
        ch <- "数据"
    }()
 
    // 设置超时时间
    timeout := 500 * time.Millisecond
 
    // 使用select等待通道ch或超时
    select {
    case data := <-ch:
        fmt.Println("接收到数据:", data)
    case <-time.After(timeout):
        fmt.Println("超时,未接收到数据")
    }
}

在这个例子中,我们创建了一个通道ch,并且在主goroutine中使用select语句和time.After函数设置了一个超时。如果在指定的超时时间内从ch接收到数据,则执行第一个case并打印接收到的数据。如果超过设定的超时时间仍未接收到数据,则执行time.After对应的case,打印超时信息。

标签:接收数据,After,golang,ch,time,超时,select
From: https://www.cnblogs.com/chenweichu/p/18337261

相关文章

  • vue el-select实时搜索模糊查询,匹配文字高亮显示
    原文链接:https://blog.csdn.net/weixin_49668076/article/details/122678834参考elementuiselect的远程搜索对应属性的解释<el-selectclass="inputInfo"v-model="searchcursom"filterableclearableremote......
  • golang etcd容器构建与客户端操作踩坑实操
    目录1.问题说明2.etcd容器构建3.goalngetcd客户端实现1.问题说明在用go-zero实现相关服务时一直报错,从报错信息看应该是etcd的容器有问题,应该是之前的构建哪里出错了,所以重新构建etcd容器应用。记录下主要的踩坑情况:1.连接etcd容器没有问题,但是写入数据时一直报......
  • 在Mybatis中不对select做任何改变,将物理删除的逻辑迁移到逻辑删除
    假设现在有一个已经完成或者已经到中期的项目,但是忘记做逻辑删除了,更改的办法如下第一步,在项目中添加如下的拦截器importcom.baomidou.mybatisplus.core.toolkit.PluginUtils;importcom.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;importlom......
  • 如何解决el-select-dropdown的宽度过长
    问题:由于名称有的特别长,导致下拉框的宽度也跟着边长,导致页面效果不好。解决办法:1、首先设置el-select的属性popper-append-to-body为false:不将下拉弹出框插入至body元素<el-selectv-model="listQuery.company":popper-append-to-body="false"class="input-select"filter......
  • golang对遍历目录操作的优化
    一转眼go1.23都快发布了,时间过得真快。不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。本文默认Linux环境,不过这个......
  • golang面试题:json包变量不加tag会怎么样?
    问题json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段?怎么答如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。如果变量首字母大写,则为public。不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。加了tag,从str......
  • 动态修改el-select 选中的值字体颜色 和下拉框字体颜色
    <el-table-columnlabel="优先级"width="120"><templateslot-scope="scope"><div:class="{'priorit1':scope.row.taskLevel===1,'priorit2�......
  • 【YashanDB知识库】使用select * 创建的物化视图无法进行查询重写
    问题现象使用如下语句准备测试数据:altersystemsetquery_rewrite_enabled=forcescope=both;droptabletest;createtabletest(tidnumber,tnamevarchar2(30));beginforiin1..100000loopinsertintotestvalues(i,i||'abcd');endloop;end;/commit......
  • Golang试用阿里通义千问大语言模型
    一、控制台配置通义千问密匙官方操作指南地址控制台地址注意:一个密匙申请之后,官方给了一个月期限共计100万条Token的额度 二、代码阶段1、DashScopRequest结构体 typeEngineRolestringconst(EngineRoleUserEngineRole="user"EngineRoleSystem......
  • 【Golang 面试 - 进阶题】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客......