我在golang中理解频道时遇到了一些麻烦.据我所知,通道是以给定时间间隔将数据发布到控制台的正确方法.
所以说我有一个正在做工作的goroutine,然后在我的主循环中我想每秒打印来自goroutine的数据.
这样的事情怎么编码?一个简单的例子将非常感激.
您可以在内存中拥有一些受保护的共享状态,您可以从长时间运行的进程中更新.然后你有一个计时器,每秒都会触发这个共享状态检查.这是一个简单的例子: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())
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4590 次 |
| 最近记录: |