gpt4 book ai didi

戈朗 : how to print data from running goroutine at fixed intervals?

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

我在理解 golang 中的 channel 时遇到了一些问题。据我所知, channel 是在给定时间间隔内将数据发布到控制台的正确方式。

假设我有一个正在工作的 goroutine,然后在我的主循环中我想每秒从那个 goroutine 打印数据。

如何编写这样的代码?一个简单的例子将不胜感激。

最佳答案

您可以在内存中拥有一些 protected 共享状态,您可以从长时间运行的进程中更新这些状态。然后你有一个计时器每秒触发一次共享状态检查。这是一个简单的例子:http://play.golang.org/p/gfGvhHUWIc

代码:

package main

import (
"fmt"
"sync"
"time"
)

type Progress struct {
current string
rwlock sync.RWMutex
}

func (p *Progress) Set(value string) {
p.rwlock.Lock()
defer p.rwlock.Unlock()
p.current = value
}

func (p *Progress) Get() string {
p.rwlock.RLock()
defer p.rwlock.RUnlock()
return p.current
}

func longJob(progress *Progress) {
i := 0
for {
time.Sleep(100 * time.Millisecond)
i++
progress.Set(fmt.Sprintf("Current progress message: %v", i))
}
}

func main() {
fmt.Println("test")
c := time.Tick(1 * time.Second)
progress := &Progress{}
go longJob(progress)
for {
select {
case <-c:
fmt.Println(progress.Get())
}
}
}

关于戈朗 : how to print data from running goroutine at fixed intervals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009588/

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