gpt4 book ai didi

go - Golang 中永无止境的 Ticker 只能工作 2 次

转载 作者:IT王子 更新时间:2023-10-29 01:08:29 25 4
gpt4 key购买 nike

我正在尝试制作一个永无止境的 channel ,但它只工作了 2 次。

您能帮我了解一下问题出在哪里吗?

代码:

package main 

import (
"fmt"
"time"
)

var mark = [2]float64{8.9876, 762.098568}

func tick(out chan <- [2]float64){

c := time.NewTicker(time.Millisecond *500)
for range c.C{
out <- mark
}
}

func main() {

fmt.Println("Start")

md := make(chan [2]float64)
go tick(md)

for range <-md{
fmt.Println(<-md)
}
}

输出:

Start
[8.9876 762.098568]
[8.9876 762.098568]

示例:https://play.golang.org/p/P2FaUwbW-3

最佳答案

这个:

for range <-md{

不同于:

for range md{

后者的范围超过 channel (你想要的),而前者的范围超过循环开始时从 channel 接收的值,它恰好是一个二元数组,因此两次处决。您还忽略了 for 语句中从 channel 接收的值,并在循环体中再次读取它,忽略 channel 上的所有其他消息(尽管这在这个例子中没有区别,因为每个值都是相同的,它会在实践中产生显着差异)。你真正想要的是:

for foo := range md{
fmt.Println(foo)
}

这是您的 playground 示例的工作版本,稍作修改以避免“程序耗时太长”错误,因为在当前形式下它永远不会停止:https://play.golang.org/p/RSUJFvluU5

关于go - Golang 中永无止境的 Ticker 只能工作 2 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45741209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com