在选择 Ticker 时,time.After 不起作用

2023-12-29

我在尝试时遇到了这个问题time.Ticker.

如下面的代码,case <-time.After(time.Millisecond * 5500):从不执行,程序会重复打印“ticker”和“chan”。

谁能解释一下吗?

package main

import (
    "fmt"
    "os"
    "time"
)

func main() {
    ticker := time.NewTicker(time.Second * 2)
    defer ticker.Stop()
    ch := time.Tick(time.Second * 3)
    for {
        select {
        case t := <-ticker.C:
            fmt.Println("From ticker:", t)
        case t := <-ch:
            fmt.Println("From chan:", t)
        case <-time.After(time.Millisecond * 5500):
            fmt.Println("timeout, exit")
            os.Exit(1)
        }
    }
}

output:

From ticker: 2021-02-02 11:31:55.9902354 +0800 CST m=+2.002391201
From chan: 2021-02-02 11:31:56.990678 +0800 CST m=+3.002835701
From ticker: 2021-02-02 11:31:57.9900811 +0800 CST m=+4.002240701
From chan: 2021-02-02 11:31:59.9901219 +0800 CST m=+6.002285301
From ticker: 2021-02-02 11:31:59.9901219 +0800 CST m=+6.002285301
From ticker: 2021-02-02 11:32:01.9901347 +0800 CST m=+8.002301901
From chan: 2021-02-02 11:32:02.990973 +0800 CST m=+9.003142101
From ticker: 2021-02-02 11:32:03.9899932 +0800 CST m=+10.002164201
From ticker: 2021-02-02 11:32:05.9911548 +0800 CST m=+12.003329601
From chan: 2021-02-02 11:32:05.9911548 +0800 CST m=+12.003329601
From ticker: 2021-02-02 11:32:07.9898197 +0800 CST m=+14.001998301

一切都按预期进行。你的前两种情况总是产生一个小于 5500ms 的值,所以不,time.After永远不会产生价值。

每次select遇到的是,一个new频道由返回time.After它将在 5.5 秒内发出一个值。您实际上永远不会等待 5.5 秒,因为两个股票行情指示器始终首先发出值,因此time.After的分支select永远不会执行并且该通道被丢弃。

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

在选择 Ticker 时,time.After 不起作用 的相关文章

  • 有没有办法间歇性地执行重复性任务?

    有没有办法在 Go 中执行重复的后台任务 我在想类似的事情Timer schedule task delay period 在爪哇 我知道我可以用 goroutine 来做到这一点Time sleep 但我想要一些容易停止的东西 这是我得到
  • 有没有办法从另一个包访问结构体的私有字段?

    我在一个包中有一个具有私有字段的结构 package foo type Foo struct x int y Foo 另一个包 例如 白盒测试包 需要访问它们 package bar import foo func change foo f
  • “http:多个response.WriteHeader调用”有什么不好的影响?

    尽管我发现 http 多个响应 WriteHeader 调用 例外 但我的服务器表现良好 此异常不会导致我的服务器出现恐慌或行为异常 我进行了很多搜索 但只找到了如何解决这个问题 没有文档描述异常的不良影响 有人可以帮我找出为什么 http
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • golang中如何将相对路径解析为绝对路径?

    节点中是否有类似 path resolve 的API 或者有什么东西可以做同样的事情 例如 nodejs代码 path resolve sample sh 应该得到 home currentuser sample sh 解决 表示用户主目录
  • 如何在 Go 中获取给定月份的第一个星期一?

    我正在尝试获取给定月份的第一个星期一 我能想到的最好方法是循环前 7 天 然后返回 Weekday Monday 有一个更好的方法吗 通过查看时间的 Weekday 您可以计算出第一个星期一 package main import fmt
  • Go 指针 - 通过指针将值附加到切片

    我有一个 struct ProductData 及其实例 p 它有一个切片属性 type ProductInfo struct TopAttributes map string interface 我想设置 TopAttributes 如下
  • 管理多租户 ArangoDB 连接

    我使用 ArangoDB Go 使用 go driver 并且需要实现多租户 这意味着每个客户都将在单独的数据库中拥有他的数据 我想要弄清楚的是如何使这种多租户发挥作用 我知道为每个请求创建一个新的数据库连接是不可持续的 这意味着我必须维护
  • 重新设计循环依赖缺陷

    我有一堆小服务 它们共享一些常见的包 例如Logger Configuration and Net 我在单独的项目中编写了每个包 问题是我的Logger需求包Configuration用于设置 和我的Configuration not仅由L
  • pq:函数unnest(未知)不是唯一的

    以下代码工作正常 但我想将 array a b c d e 定义为变量 rows err db Query select colname from SELECT date unnest array a b c d e AS colname
  • ioutil.ReadFile - 没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 对于以下代码 package main import fmt io ioutil strings func main b err ioutil ReadFile shakespeare txt if err ni
  • 如何在Google AppEngine上设置环境变量?

    我正在尝试在谷歌应用程序引擎上设置和使用环境变量 我的 app yaml 文件如下所示 但是 当我使用 os Getenv mytoken 时 我得到一个空字符串 而不是我设置的实际值 是GAE的bug吗 api version go1 h
  • 可执行文件不在路径中 - GO

    我正在尝试调用命令提示符的内置命令 但出现了我不明白的错误 func main cmd exec Command del C trial now txt Reboot if needed cmd Stdout os Stdout if er
  • 如何使用 exec.Command 在 golang 中执行 Mysql 脚本

    您好 我正在尝试执行一个脚本以使用 Golang 将数据填充到数据库中 func executeTestScript cmd exec Command usr local mysql bin mysql h127 0 0 1 P3333 u
  • 在 Go 中解析多个 JSON 对象

    可以使用以下方法轻松解析如下对象encoding json包裹 something foo something else bar 我面临的问题是当服务器返回多个字典时 如下所示 something foo something else ba
  • 将 Websocket 消息发送到 Go 中的特定通道(使用 Gorilla)

    我对 Go 很陌生 并且发现自己使用套接字作为我的第一个项目 这是一个多余的问题 但我无法理解如何将 websocket 更新发送到 Go 中的特定通道 使用 Gorilla 我在用此链接中的代码示例 https github com go
  • 是否可以在 Golang 中 pickle 结构实例

    我正在 Golang 中做一些机器学习 我现在碰壁了 我训练有素的分类器需要将近半分钟的时间来训练 并且想要保存分类器的该实例 这样我就不必每次都从头开始训练 在 Golang 中应该如何去做呢 仅供参考 我的分类器是一个结构 当我用 py
  • 防止使用 golang 服务器访问文件夹中的文件

    我在 golang 中有一个服务器可以处理这样的文件夹路径 fs http FileServer http Dir assets http Handle Images fs http ListenAndServe 8000 nil 但在这个

随机推荐

  • 在 OpenCV 中访问多维 Mat 的子矩阵

    根据这个post https stackoverflow com questions 8809517 multi dimensional data in a matrix in opencv with c从 OpenCV 文档中 我可以初始
  • Ember-CLI:修复“'Ember'未定义”?

    当使用 Ember CLI 并运行 ember 服务器时 我从 JSLint 收到以下错误 app path filename js line 1 col 16 Ember is not defined Adding import Embe
  • 如何调用另一个文件的函数而不包含该文件

    我有一个类假设 A 和另一个类 B 分别位于两个不同的文件 A php 和 B php 中 如何在B php文件中调用A类的函数而不在B php中包含A php文件 我们可以使用静态函数来调用吗 我见过一个应用程序 其中不包含文件也不扩展
  • render_template 和重定向之间的区别?

    return redirect url for index var var return render template index html var var 这两行本质上是同一件事吗 这两个函数有什么区别 redirect返回一个 302
  • 如何在 Flutter 中“设置”“WidgetTester”进行多个测试

    1 问题 The testWidgets函数显然只是test功能 我现在试图解决的一个用例是为多个泵送相同的小部件testWidgets a setUp对于多个testWidgets 但是 如果它在每个测试中创建一个新实例 我该如何做到这一
  • ANSI C 中的动态列表?

    我是否正确地认为创建在 C 中运行时增长的列表的唯一方法是使用链表 您可以结合使用 malloc 和 realloc 首先初始化一个 C 数组 malloc 并增长它 realloc 但是 如果您进行大量插入 您不会希望一次将其增加 1 个
  • 提交签名如何工作?

    我目前想知道 git commit 签名到底是如何工作的 试图找出这一点 但找不到任何确切的技术文档 我知道如何进行 git 提交签名 但我想知道 git 到底做了什么来签署提交 签署的具体内容是什么 它是给定提交时存储库内的完整数据 即提
  • 找出内存泄漏吗?

    我是 iphone 应用程序的新手 现在这是我的第一个应用程序 应用程序已安装但未运行 我写的这段代码显示内存泄漏 请找出来 提前致谢 ABRecordRef ref CFArrayGetValueAtIndex all i CFStrin
  • 如何在 HTA 文件上播放声音

    我已经在互联网上搜索了一段时间 但没有教程解释如何播放声音
  • 当重新创建布局包含视图的活动时,视图的“标签”是否会恢复?

    The docs http developer android com training basics activity lifecycle recreating html关于Activity休闲状态 默认情况下 系统使用Bundle实例状
  • Node js 中连接 ECONNREFUSED 127.0.0.1:21 错误

    我正在用 Node js 编写一个简单的应用程序 但遇到了这个问题 Error connect ECONNREFUSED 127 0 0 1 21 at Object exports errnoException util js 1034
  • 在Python2上运行jupyter笔记本时遇到困难

    我有Python 2 2 7 14 和 Python 3 3 6 4 安装在我的电脑上 Linux rajarshi x550cc 4 15 10 300 fc27 x86 64 1 SMP Thu Mar 15 17 13 04 UTC
  • 使用 libgdx 缩放 scene2d 按钮

    I don t know if it is just me but drawables http libgdx badlogicgames com nightlies docs api com badlogic gdx scenes sce
  • 如何关闭 MKMapView 中 MKAnnotation 的标注

    我有一个带有许多注释的 MKMapView 选择引脚会显示标注 按下附件会将新的视图控制器弹出到堆栈上 然而 当我从新的 VC 中按回时 标注仍然打开 我该如何关闭它 我努力了 if myMapView selectedAnnotation
  • 如何在java中使用enumMap

    java中如何使用enumMap 我想使用 enumMap 来获取从 0 到 n 的常量命名值 其中 n 是大小 但我不明白oracle网站上的描述 gt EnumMap http docs oracle com javase 8 docs
  • 字符串转换器获取标准值集合

    我正在尝试使用属性网格来显示数据 我必须为预定义的字符串常量编写 StringConverters 以便它们可以显示在组合框中 考虑一个颜色列表和另一个角度 0 90 180 270 列表 我想在网格上显示很多这样的列表 我正在编写从 St
  • d3.js 中的可折叠/分层和力导向图

    有很多强制导向图 即节点和链接 和可折叠树 即父子节点 的示例 但我找不到这些组合的示例 除了像这样的一些 1 级集群网络 http static cybercommons org js d3 examples force force cl
  • 在 SwiftUI 中向按钮添加文本和图像

    我正在尝试添加两者Text and Image on Button like Button action Image gift Text Send padding horizontal padding foregroundColor whi
  • 如何以编程方式向解决方案添加/删除现有项目?

    此处发布了类似 不重复 的问题 如何以编程方式列出解决方案中的所有项目 https stackoverflow com questions 3802027 reading the list of all csproj projects of
  • 在选择 Ticker 时,time.After 不起作用

    我在尝试时遇到了这个问题time Ticker 如下面的代码 case lt time After time Millisecond 5500 从不执行 程序会重复打印 ticker 和 chan 谁能解释一下吗 package main